{
  "contractName": "FixedPoint",
  "abi": [],
  "bytecode": "0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820d1d956bfd6c986231bde1a437dd4ecdcfb1b967fc85e78ed695d74daaa90cb830029",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a72305820d1d956bfd6c986231bde1a437dd4ecdcfb1b967fc85e78ed695d74daaa90cb830029",
  "sourceMap": "188:5028:11:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24",
  "deployedSourceMap": "188:5028:11:-;;;;;;;;",
  "source": "pragma solidity >=0.4.0;\r\n\r\nimport './FullMath.sol';\r\nimport './Babylonian.sol';\r\n\r\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\r\nlibrary FixedPoint {\r\n    // range: [0, 2**112 - 1]\r\n    // resolution: 1 / 2**112\r\n    struct uq112x112 {\r\n        uint224 _x;\r\n    }\r\n\r\n    // range: [0, 2**144 - 1]\r\n    // resolution: 1 / 2**112\r\n    struct uq144x112 {\r\n        uint256 _x;\r\n    }\r\n\r\n    uint8 private constant RESOLUTION = 112;\r\n    uint256 private constant Q112 = uint256(1) << RESOLUTION;\r\n    uint256 private constant Q224 = Q112 << RESOLUTION;\r\n    uint256 private constant LOWER_MASK = 0xffffffffffffffffffffffffffff; // decimal of UQ*x112 (lower 112 bits)\r\n\r\n    // encode a uint112 as a UQ112x112\r\n    function encode(uint112 x) internal pure returns (uq112x112 memory) {\r\n        return uq112x112(uint224(x) << RESOLUTION);\r\n    }\r\n\r\n    // encodes a uint144 as a UQ144x112\r\n    function encode144(uint144 x) internal pure returns (uq144x112 memory) {\r\n        return uq144x112(uint256(x) << RESOLUTION);\r\n    }\r\n\r\n    // decode a UQ112x112 into a uint112 by truncating after the radix point\r\n    function decode(uq112x112 memory self) internal pure returns (uint112) {\r\n        return uint112(self._x >> RESOLUTION);\r\n    }\r\n\r\n    // decode a UQ144x112 into a uint144 by truncating after the radix point\r\n    function decode144(uq144x112 memory self) internal pure returns (uint144) {\r\n        return uint144(self._x >> RESOLUTION);\r\n    }\r\n\r\n    // multiply a UQ112x112 by a uint, returning a UQ144x112\r\n    // reverts on overflow\r\n    function mul(uq112x112 memory self, uint256 y) internal pure returns (uq144x112 memory) {\r\n        uint256 z = 0;\r\n        require(y == 0 || (z = self._x * y) / y == self._x, 'FixedPoint: MUL_OVERFLOW');\r\n        return uq144x112(z);\r\n    }\r\n\r\n    // multiply a UQ112x112 by an int and decode, returning an int\r\n    // reverts on overflow\r\n    function muli(uq112x112 memory self, int256 y) internal pure returns (int256) {\r\n        uint144 z = decode144(mul(self, uint256(y < 0 ? -y : y)));\r\n        return y < 0 ? -int256(z) : z;\r\n    }\r\n\r\n    // multiply a UQ112x112 by a UQ112x112, returning a UQ112x112\r\n    // lossy\r\n    function muluq(uq112x112 memory self, uq112x112 memory other) internal pure returns (uq112x112 memory) {\r\n        if (self._x == 0 || other._x == 0) {\r\n            return uq112x112(0);\r\n        }\r\n        uint112 upper_self = uint112(self._x >> RESOLUTION); // * 2^0\r\n        uint112 lower_self = uint112(self._x & LOWER_MASK); // * 2^-112\r\n        uint112 upper_other = uint112(other._x >> RESOLUTION); // * 2^0\r\n        uint112 lower_other = uint112(other._x & LOWER_MASK); // * 2^-112\r\n\r\n        // partial products\r\n        uint224 upper = uint224(upper_self) * upper_other; // * 2^0\r\n        uint224 lower = uint224(lower_self) * lower_other; // * 2^-224\r\n        uint224 uppers_lowero = uint224(upper_self) * lower_other; // * 2^-112\r\n        uint224 uppero_lowers = uint224(upper_other) * lower_self; // * 2^-112\r\n\r\n        // so the bit shift does not overflow\r\n        require(upper <= uint112(-1), 'FixedPoint: MULUQ_OVERFLOW_UPPER');\r\n\r\n        // this cannot exceed 256 bits, all values are 224 bits\r\n        uint256 sum = uint256(upper << RESOLUTION) + uppers_lowero + uppero_lowers + (lower >> RESOLUTION);\r\n\r\n        // so the cast does not overflow\r\n        require(sum <= uint224(-1), 'FixedPoint: MULUQ_OVERFLOW_SUM');\r\n\r\n        return uq112x112(uint224(sum));\r\n    }\r\n\r\n    // divide a UQ112x112 by a UQ112x112, returning a UQ112x112\r\n    function divuq(uq112x112 memory self, uq112x112 memory other) internal pure returns (uq112x112 memory) {\r\n        require(other._x > 0, 'FixedPoint: DIV_BY_ZERO_DIVUQ');\r\n        if (self._x == other._x) {\r\n            return uq112x112(uint224(Q112));\r\n        }\r\n        if (self._x <= uint144(-1)) {\r\n            uint256 value = (uint256(self._x) << RESOLUTION) / other._x;\r\n            require(value <= uint224(-1), 'FixedPoint: DIVUQ_OVERFLOW');\r\n            return uq112x112(uint224(value));\r\n        }\r\n\r\n        uint256 result = FullMath.mulDiv(Q112, self._x, other._x);\r\n        require(result <= uint224(-1), 'FixedPoint: DIVUQ_OVERFLOW');\r\n        return uq112x112(uint224(result));\r\n    }\r\n\r\n    // returns a UQ112x112 which represents the ratio of the numerator to the denominator\r\n    // lossy\r\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\r\n        require(denominator > 0, 'FixedPoint: DIV_BY_ZERO_FRACTION');\r\n        return uq112x112((uint224(numerator) << RESOLUTION) / denominator);\r\n    }\r\n\r\n    // take the reciprocal of a UQ112x112\r\n    // reverts on overflow\r\n    // lossy\r\n    function reciprocal(uq112x112 memory self) internal pure returns (uq112x112 memory) {\r\n        require(self._x > 1, 'FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW');\r\n        return uq112x112(uint224(Q224 / self._x));\r\n    }\r\n\r\n    // square root of a UQ112x112\r\n    // lossy to 40 bits\r\n    function sqrt(uq112x112 memory self) internal pure returns (uq112x112 memory) {\r\n        return uq112x112(uint224(Babylonian.sqrt(uint256(self._x) << 32) << 40));\r\n    }\r\n}\r\n",
  "sourcePath": "@sonicxchain/soxswap-lib/contracts/libraries/FixedPoint.sol",
  "ast": {
    "absolutePath": "@sonicxchain/soxswap-lib/contracts/libraries/FixedPoint.sol",
    "exportedSymbols": {
      "FixedPoint": [
        4186
      ]
    },
    "id": 4187,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3713,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:11"
      },
      {
        "absolutePath": "@sonicxchain/soxswap-lib/contracts/libraries/FullMath.sol",
        "file": "./FullMath.sol",
        "id": 3714,
        "nodeType": "ImportDirective",
        "scope": 4187,
        "sourceUnit": 4380,
        "src": "28:24:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@sonicxchain/soxswap-lib/contracts/libraries/Babylonian.sol",
        "file": "./Babylonian.sol",
        "id": 3715,
        "nodeType": "ImportDirective",
        "scope": 4187,
        "sourceUnit": 3712,
        "src": "54:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4186,
        "linearizedBaseContracts": [
          4186
        ],
        "name": "FixedPoint",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "FixedPoint.uq112x112",
            "id": 3718,
            "members": [
              {
                "constant": false,
                "id": 3717,
                "name": "_x",
                "nodeType": "VariableDeclaration",
                "scope": 3718,
                "src": "304:10:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint224",
                  "typeString": "uint224"
                },
                "typeName": {
                  "id": 3716,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "304:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "uq112x112",
            "nodeType": "StructDefinition",
            "scope": 4186,
            "src": "276:46:11",
            "visibility": "public"
          },
          {
            "canonicalName": "FixedPoint.uq144x112",
            "id": 3721,
            "members": [
              {
                "constant": false,
                "id": 3720,
                "name": "_x",
                "nodeType": "VariableDeclaration",
                "scope": 3721,
                "src": "420:10:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3719,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "420:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "uq144x112",
            "nodeType": "StructDefinition",
            "scope": 4186,
            "src": "392:46:11",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3724,
            "name": "RESOLUTION",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "446:39:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3722,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "446:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313132",
              "id": 3723,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "482:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_112_by_1",
                "typeString": "int_const 112"
              },
              "value": "112"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3731,
            "name": "Q112",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "492:56:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3725,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "492:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 3730,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "532:1:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  }
                ],
                "expression": {
                  "argumentTypes": [
                    {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    }
                  ],
                  "id": 3726,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "ElementaryTypeNameExpression",
                  "src": "524:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_uint256_$",
                    "typeString": "type(uint256)"
                  },
                  "typeName": "uint256"
                },
                "id": 3728,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "typeConversion",
                "lValueRequested": false,
                "names": [],
                "nodeType": "FunctionCall",
                "src": "524:10:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "argumentTypes": null,
                "id": 3729,
                "name": "RESOLUTION",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3724,
                "src": "538:10:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "src": "524:24:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3736,
            "name": "Q224",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "555:50:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3732,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "555:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 3735,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "id": 3733,
                "name": "Q112",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3731,
                "src": "587:4:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "argumentTypes": null,
                "id": 3734,
                "name": "RESOLUTION",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3724,
                "src": "595:10:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "src": "587:18:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3739,
            "name": "LOWER_MASK",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "612:68:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3737,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "612:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307866666666666666666666666666666666666666666666666666666666",
              "id": 3738,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "650:30:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5192296858534827628530496329220095_by_1",
                "typeString": "int_const 5192...(26 digits omitted)...0095"
              },
              "value": "0xffffffffffffffffffffffffffff"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 3754,
              "nodeType": "Block",
              "src": "836:61:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3748,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3741,
                              "src": "872:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            ],
                            "id": 3747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "864:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": "uint224"
                          },
                          "id": 3749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "864:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3750,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "878:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "864:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3746,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "854:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 3752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "854:35:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 3745,
                  "id": 3753,
                  "nodeType": "Return",
                  "src": "847:42:11"
                }
              ]
            },
            "documentation": null,
            "id": 3755,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3741,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "784:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 3740,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "784:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "783:11:11"
            },
            "returnParameters": {
              "id": 3745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3744,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "818:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3743,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "818:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "817:18:11"
            },
            "scope": 4186,
            "src": "768:129:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3770,
              "nodeType": "Block",
              "src": "1017:61:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3764,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3757,
                              "src": "1053:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint144",
                                "typeString": "uint144"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint144",
                                "typeString": "uint144"
                              }
                            ],
                            "id": 3763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1045:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 3765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1045:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3766,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "1059:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1045:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3762,
                      "name": "uq144x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3721,
                      "src": "1035:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq144x112_$3721_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq144x112 storage pointer)"
                      }
                    },
                    "id": 3768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1035:35:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_memory",
                      "typeString": "struct FixedPoint.uq144x112 memory"
                    }
                  },
                  "functionReturnParameters": 3761,
                  "id": 3769,
                  "nodeType": "Return",
                  "src": "1028:42:11"
                }
              ]
            },
            "documentation": null,
            "id": 3771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encode144",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3757,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 3771,
                  "src": "965:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint144",
                    "typeString": "uint144"
                  },
                  "typeName": {
                    "id": 3756,
                    "name": "uint144",
                    "nodeType": "ElementaryTypeName",
                    "src": "965:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "964:11:11"
            },
            "returnParameters": {
              "id": 3761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3760,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3771,
                  "src": "999:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3759,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3721,
                    "src": "999:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "998:18:11"
            },
            "scope": 4186,
            "src": "946:132:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3785,
              "nodeType": "Block",
              "src": "1235:56:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3779,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3773,
                            "src": "1261:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3780,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "1261:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3781,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "1272:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1261:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1253:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3783,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1253:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "functionReturnParameters": 3777,
                  "id": 3784,
                  "nodeType": "Return",
                  "src": "1246:37:11"
                }
              ]
            },
            "documentation": null,
            "id": 3786,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3773,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3786,
                  "src": "1180:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3772,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "1180:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1179:23:11"
            },
            "returnParameters": {
              "id": 3777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3776,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3786,
                  "src": "1226:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 3775,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1225:9:11"
            },
            "scope": 4186,
            "src": "1164:127:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3800,
              "nodeType": "Block",
              "src": "1451:56:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3794,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3788,
                            "src": "1477:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                              "typeString": "struct FixedPoint.uq144x112 memory"
                            }
                          },
                          "id": 3795,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3720,
                          "src": "1477:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3796,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "1488:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1477:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1469:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint144_$",
                        "typeString": "type(uint144)"
                      },
                      "typeName": "uint144"
                    },
                    "id": 3798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1469:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "functionReturnParameters": 3792,
                  "id": 3799,
                  "nodeType": "Return",
                  "src": "1462:37:11"
                }
              ]
            },
            "documentation": null,
            "id": 3801,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decode144",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3788,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3801,
                  "src": "1396:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3787,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3721,
                    "src": "1396:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1395:23:11"
            },
            "returnParameters": {
              "id": 3792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3791,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3801,
                  "src": "1442:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint144",
                    "typeString": "uint144"
                  },
                  "typeName": {
                    "id": 3790,
                    "name": "uint144",
                    "nodeType": "ElementaryTypeName",
                    "src": "1442:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1441:9:11"
            },
            "scope": 4186,
            "src": "1377:130:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3838,
              "nodeType": "Block",
              "src": "1693:152:11",
              "statements": [
                {
                  "assignments": [
                    3811
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3811,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 3838,
                      "src": "1704:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3810,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1704:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3813,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 3812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1716:1:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1704:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3815,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3805,
                            "src": "1736:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1741:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1736:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3826,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 3823,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 3818,
                                    "name": "z",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3811,
                                    "src": "1747:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3822,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 3819,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3803,
                                        "src": "1751:4:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                          "typeString": "struct FixedPoint.uq112x112 memory"
                                        }
                                      },
                                      "id": 3820,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "_x",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3717,
                                      "src": "1751:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3821,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3805,
                                      "src": "1761:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1751:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1747:15:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 3824,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1746:17:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 3825,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3805,
                              "src": "1766:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1746:21:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3827,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3803,
                              "src": "1771:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                "typeString": "struct FixedPoint.uq112x112 memory"
                              }
                            },
                            "id": 3828,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_x",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3717,
                            "src": "1771:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "1746:32:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1736:42:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c5f4f564552464c4f57",
                        "id": 3831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1780:26:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                          "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                        },
                        "value": "FixedPoint: MUL_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                          "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                        }
                      ],
                      "id": 3814,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "1728:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1728:79:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3833,
                  "nodeType": "ExpressionStatement",
                  "src": "1728:79:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3835,
                        "name": "z",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3811,
                        "src": "1835:1:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3834,
                      "name": "uq144x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3721,
                      "src": "1825:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq144x112_$3721_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq144x112 storage pointer)"
                      }
                    },
                    "id": 3836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1825:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_memory",
                      "typeString": "struct FixedPoint.uq144x112 memory"
                    }
                  },
                  "functionReturnParameters": 3809,
                  "id": 3837,
                  "nodeType": "Return",
                  "src": "1818:19:11"
                }
              ]
            },
            "documentation": null,
            "id": 3839,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3803,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3839,
                  "src": "1618:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3802,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "1618:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3805,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 3839,
                  "src": "1641:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3804,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1641:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1617:34:11"
            },
            "returnParameters": {
              "id": 3809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3808,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3839,
                  "src": "1675:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3807,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3721,
                    "src": "1675:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1674:18:11"
            },
            "scope": 4186,
            "src": "1605:240:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3875,
              "nodeType": "Block",
              "src": "2027:116:11",
              "statements": [
                {
                  "assignments": [
                    3849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3849,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 3875,
                      "src": "2038:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      },
                      "typeName": {
                        "id": 3848,
                        "name": "uint144",
                        "nodeType": "ElementaryTypeName",
                        "src": "2038:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint144",
                          "typeString": "uint144"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3864,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3852,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3841,
                            "src": "2064:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 3856,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3854,
                                    "name": "y",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3843,
                                    "src": "2078:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3855,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2082:1:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "2078:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 3859,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3843,
                                  "src": "2091:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 3860,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "2078:14:11",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 3858,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "-",
                                  "prefix": true,
                                  "src": "2086:2:11",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 3857,
                                    "name": "y",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3843,
                                    "src": "2087:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 3853,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2070:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 3861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2070:23:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 3851,
                          "name": "mul",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3839,
                          "src": "2060:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_uq112x112_$3718_memory_ptr_$_t_uint256_$returns$_t_struct$_uq144x112_$3721_memory_ptr_$",
                            "typeString": "function (struct FixedPoint.uq112x112 memory,uint256) pure returns (struct FixedPoint.uq144x112 memory)"
                          }
                        },
                        "id": 3862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2060:34:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                          "typeString": "struct FixedPoint.uq144x112 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                          "typeString": "struct FixedPoint.uq144x112 memory"
                        }
                      ],
                      "id": 3850,
                      "name": "decode144",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3801,
                      "src": "2050:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_uq144x112_$3721_memory_ptr_$returns$_t_uint144_$",
                        "typeString": "function (struct FixedPoint.uq144x112 memory) pure returns (uint144)"
                      }
                    },
                    "id": 3863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2050:45:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2038:57:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 3867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3865,
                        "name": "y",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "2113:1:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2117:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2113:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 3872,
                      "name": "z",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3849,
                      "src": "2134:1:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      }
                    },
                    "id": 3873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2113:22:11",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 3871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "2121:10:11",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3869,
                            "name": "z",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3849,
                            "src": "2129:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint144",
                              "typeString": "uint144"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint144",
                              "typeString": "uint144"
                            }
                          ],
                          "id": 3868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2122:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": "int256"
                        },
                        "id": 3870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2122:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 3847,
                  "id": 3874,
                  "nodeType": "Return",
                  "src": "2106:29:11"
                }
              ]
            },
            "documentation": null,
            "id": 3876,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "muli",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3841,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3876,
                  "src": "1963:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3840,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "1963:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3843,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 3876,
                  "src": "1986:8:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 3842,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1986:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1962:33:11"
            },
            "returnParameters": {
              "id": 3847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3846,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3876,
                  "src": "2019:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 3845,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2019:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2018:8:11"
            },
            "scope": 4186,
            "src": "1949:194:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4011,
              "nodeType": "Block",
              "src": "2335:1183:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "id": 3888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3885,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3878,
                          "src": "2350:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 3886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "2350:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2361:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2350:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "id": 3892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3889,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3880,
                          "src": "2366:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 3890,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "2366:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3891,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2378:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2366:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2350:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3899,
                  "nodeType": "IfStatement",
                  "src": "2346:81:11",
                  "trueBody": {
                    "id": 3898,
                    "nodeType": "Block",
                    "src": "2381:46:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2413:1:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 3894,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3718,
                            "src": "2403:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 3896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2403:12:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 3884,
                        "id": 3897,
                        "nodeType": "Return",
                        "src": "2396:19:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3901,
                      "name": "upper_self",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2437:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3900,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2437:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3908,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3903,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3878,
                            "src": "2466:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3904,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2466:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3905,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "2477:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "2466:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2458:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2458:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2437:51:11"
                },
                {
                  "assignments": [
                    3910
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3910,
                      "name": "lower_self",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2508:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3909,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2508:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3917,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3912,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3878,
                            "src": "2537:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3913,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2537:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3914,
                          "name": "LOWER_MASK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "2547:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2537:20:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3911,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2529:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2529:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2508:50:11"
                },
                {
                  "assignments": [
                    3919
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3919,
                      "name": "upper_other",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2581:19:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3918,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2581:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3926,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3921,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3880,
                            "src": "2611:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3922,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2611:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3923,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "2623:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "2611:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2603:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2603:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2581:53:11"
                },
                {
                  "assignments": [
                    3928
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3928,
                      "name": "lower_other",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2654:19:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3927,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2654:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3935,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3930,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3880,
                            "src": "2684:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3931,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2684:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3932,
                          "name": "LOWER_MASK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "2695:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2684:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2676:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2676:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2654:52:11"
                },
                {
                  "assignments": [
                    3937
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3937,
                      "name": "upper",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2760:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3936,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2760:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3943,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3939,
                          "name": "upper_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3901,
                          "src": "2784:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3938,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2776:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2776:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3941,
                      "name": "upper_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3919,
                      "src": "2798:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2776:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2760:49:11"
                },
                {
                  "assignments": [
                    3945
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3945,
                      "name": "lower",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2829:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3944,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2829:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3951,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3947,
                          "name": "lower_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3910,
                          "src": "2853:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2845:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2845:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3949,
                      "name": "lower_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3928,
                      "src": "2867:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2845:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2829:49:11"
                },
                {
                  "assignments": [
                    3953
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3953,
                      "name": "uppers_lowero",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2901:21:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3952,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2901:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3959,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3955,
                          "name": "upper_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3901,
                          "src": "2933:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2925:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2925:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3957,
                      "name": "lower_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3928,
                      "src": "2947:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2925:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2901:57:11"
                },
                {
                  "assignments": [
                    3961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3961,
                      "name": "uppero_lowers",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2981:21:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3960,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2981:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3967,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3963,
                          "name": "upper_other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3919,
                          "src": "3013:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3962,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3005:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3005:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3965,
                      "name": "lower_self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3910,
                      "src": "3028:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "3005:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2981:57:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3969,
                          "name": "upper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3937,
                          "src": "3118:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3972,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "3135:2:11",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3136:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 3970,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3127:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint112_$",
                              "typeString": "type(uint112)"
                            },
                            "typeName": "uint112"
                          },
                          "id": 3973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3127:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "src": "3118:20:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f5550504552",
                        "id": 3975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3140:34:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                        },
                        "value": "FixedPoint: MULUQ_OVERFLOW_UPPER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                        }
                      ],
                      "id": 3968,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "3110:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3110:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3977,
                  "nodeType": "ExpressionStatement",
                  "src": "3110:65:11"
                },
                {
                  "assignments": [
                    3979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3979,
                      "name": "sum",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "3253:11:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3978,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3253:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3994,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "id": 3983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 3981,
                                "name": "upper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3937,
                                "src": "3275:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3982,
                                "name": "RESOLUTION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "3284:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "3275:19:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 3980,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3267:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 3984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3267:28:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3985,
                          "name": "uppers_lowero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3953,
                          "src": "3298:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "3267:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3987,
                        "name": "uppero_lowers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3961,
                        "src": "3314:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "src": "3267:60:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "id": 3991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3989,
                            "name": "lower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3945,
                            "src": "3331:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3990,
                            "name": "RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3724,
                            "src": "3340:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "3331:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        }
                      ],
                      "id": 3992,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3330:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "3267:84:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3253:98:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3996,
                          "name": "sum",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3979,
                          "src": "3414:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "3429:2:11",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3998,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3430:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 3997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3421:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": "uint224"
                          },
                          "id": 4000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3421:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "3414:18:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f53554d",
                        "id": 4002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3434:32:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                        },
                        "value": "FixedPoint: MULUQ_OVERFLOW_SUM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                        }
                      ],
                      "id": 3995,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "3406:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3406:61:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4004,
                  "nodeType": "ExpressionStatement",
                  "src": "3406:61:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4007,
                            "name": "sum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3979,
                            "src": "3505:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3497:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3497:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4005,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "3487:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3487:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 3884,
                  "id": 4010,
                  "nodeType": "Return",
                  "src": "3480:30:11"
                }
              ]
            },
            "documentation": null,
            "id": 4012,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "muluq",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3878,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4012,
                  "src": "2247:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3877,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "2247:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3880,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 4012,
                  "src": "2270:22:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3879,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "2270:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2246:47:11"
            },
            "returnParameters": {
              "id": 3884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3883,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4012,
                  "src": "2317:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3882,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "2317:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2316:18:11"
            },
            "scope": 4186,
            "src": "2232:1286:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4107,
              "nodeType": "Block",
              "src": "3694:596:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 4025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4022,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4016,
                            "src": "3713:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 4023,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "3713:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3724:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3713:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f4449565551",
                        "id": 4026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3727:31:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_DIVUQ"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                        }
                      ],
                      "id": 4021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "3705:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3705:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4028,
                  "nodeType": "ExpressionStatement",
                  "src": "3705:54:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 4033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4029,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4014,
                        "src": "3774:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 4030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "3774:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4031,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "3785:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 4032,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "3785:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "3774:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4041,
                  "nodeType": "IfStatement",
                  "src": "3770:83:11",
                  "trueBody": {
                    "id": 4040,
                    "nodeType": "Block",
                    "src": "3795:58:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4036,
                                  "name": "Q112",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3731,
                                  "src": "3835:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3827:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": "uint224"
                              },
                              "id": 4037,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3827:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 4034,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3718,
                            "src": "3817:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 4038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3817:24:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 4020,
                        "id": 4039,
                        "nodeType": "Return",
                        "src": "3810:31:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 4048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4042,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4014,
                        "src": "3867:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 4043,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "3867:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "3886:2:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3887:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 4044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3878:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint144_$",
                          "typeString": "type(uint144)"
                        },
                        "typeName": "uint144"
                      },
                      "id": 4047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3878:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      }
                    },
                    "src": "3867:22:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4079,
                  "nodeType": "IfStatement",
                  "src": "3863:235:11",
                  "trueBody": {
                    "id": 4078,
                    "nodeType": "Block",
                    "src": "3891:207:11",
                    "statements": [
                      {
                        "assignments": [
                          4050
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4050,
                            "name": "value",
                            "nodeType": "VariableDeclaration",
                            "scope": 4078,
                            "src": "3906:13:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4049,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3906:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4061,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4052,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4014,
                                        "src": "3931:4:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                          "typeString": "struct FixedPoint.uq112x112 memory"
                                        }
                                      },
                                      "id": 4053,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "_x",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3717,
                                      "src": "3931:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    ],
                                    "id": 4051,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3923:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 4054,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3923:16:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 4055,
                                  "name": "RESOLUTION",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3724,
                                  "src": "3943:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "3923:30:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4057,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3922:32:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4058,
                              "name": "other",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4016,
                              "src": "3957:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                "typeString": "struct FixedPoint.uq112x112 memory"
                              }
                            },
                            "id": 4059,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_x",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3717,
                            "src": "3957:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "3922:43:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3906:59:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4068,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4063,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4050,
                                "src": "3988:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "4005:2:11",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 4065,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4006:1:11",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 4064,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3997:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": "uint224"
                                },
                                "id": 4067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3997:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "src": "3988:20:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                              "id": 4069,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4010:28:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                              },
                              "value": "FixedPoint: DIVUQ_OVERFLOW"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                              }
                            ],
                            "id": 4062,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4577,
                              4578
                            ],
                            "referencedDeclaration": 4578,
                            "src": "3980:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3980:59:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4071,
                        "nodeType": "ExpressionStatement",
                        "src": "3980:59:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4074,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4050,
                                  "src": "4079:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4071:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": "uint224"
                              },
                              "id": 4075,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4071:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 4072,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3718,
                            "src": "4061:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 4076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4061:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 4020,
                        "id": 4077,
                        "nodeType": "Return",
                        "src": "4054:32:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4081
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4081,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 4107,
                      "src": "4110:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4080,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4110:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4090,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4084,
                        "name": "Q112",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3731,
                        "src": "4143:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4085,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4014,
                          "src": "4149:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 4086,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "4149:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4087,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4016,
                          "src": "4158:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 4088,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "4158:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4082,
                        "name": "FullMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4379,
                        "src": "4127:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FullMath_$4379_$",
                          "typeString": "type(library FullMath)"
                        }
                      },
                      "id": 4083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4378,
                      "src": "4127:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4127:40:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4110:57:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4092,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4081,
                          "src": "4186:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "4204:2:11",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 4094,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4205:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 4093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4196:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": "uint224"
                          },
                          "id": 4096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4196:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "4186:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                        "id": 4098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4209:28:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                        },
                        "value": "FixedPoint: DIVUQ_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                        }
                      ],
                      "id": 4091,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "4178:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4178:60:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4100,
                  "nodeType": "ExpressionStatement",
                  "src": "4178:60:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4103,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4081,
                            "src": "4274:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4266:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4266:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4101,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "4256:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4256:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4020,
                  "id": 4106,
                  "nodeType": "Return",
                  "src": "4249:33:11"
                }
              ]
            },
            "documentation": null,
            "id": 4108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divuq",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4014,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4108,
                  "src": "3606:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4013,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "3606:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4016,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 4108,
                  "src": "3629:22:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4015,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "3629:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3605:47:11"
            },
            "returnParameters": {
              "id": 4020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4019,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4108,
                  "src": "3676:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4018,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "3676:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3675:18:11"
            },
            "scope": 4186,
            "src": "3591:699:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4135,
              "nodeType": "Block",
              "src": "4502:156:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "id": 4120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4118,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4112,
                          "src": "4521:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4535:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4521:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f4652414354494f4e",
                        "id": 4121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4538:34:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_FRACTION"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                        }
                      ],
                      "id": 4117,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "4513:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4513:60:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4123,
                  "nodeType": "ExpressionStatement",
                  "src": "4513:60:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 4132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "id": 4129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4126,
                                    "name": "numerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "4610:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "id": 4125,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4602:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": "uint224"
                                },
                                "id": 4127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4602:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4128,
                                "name": "RESOLUTION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "4624:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "4602:32:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "id": 4130,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4601:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4131,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4112,
                          "src": "4638:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "src": "4601:48:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4124,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "4591:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4591:59:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4116,
                  "id": 4134,
                  "nodeType": "Return",
                  "src": "4584:66:11"
                }
              ]
            },
            "documentation": null,
            "id": 4136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fraction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4110,
                  "name": "numerator",
                  "nodeType": "VariableDeclaration",
                  "scope": 4136,
                  "src": "4421:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 4109,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "4421:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4112,
                  "name": "denominator",
                  "nodeType": "VariableDeclaration",
                  "scope": 4136,
                  "src": "4440:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 4111,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "4440:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4420:40:11"
            },
            "returnParameters": {
              "id": 4116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4115,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4136,
                  "src": "4484:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4114,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "4484:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4483:18:11"
            },
            "scope": 4186,
            "src": "4403:255:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4160,
              "nodeType": "Block",
              "src": "4835:141:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 4147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4144,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4138,
                            "src": "4854:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 4145,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "4854:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 4146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4864:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "4854:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f5245434950524f43414c5f4f525f4f564552464c4f57",
                        "id": 4148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4867:48:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                        }
                      ],
                      "id": 4143,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "4846:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4846:70:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4150,
                  "nodeType": "ExpressionStatement",
                  "src": "4846:70:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 4153,
                              "name": "Q224",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3736,
                              "src": "4952:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4154,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4138,
                                "src": "4959:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                  "typeString": "struct FixedPoint.uq112x112 memory"
                                }
                              },
                              "id": 4155,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_x",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3717,
                              "src": "4959:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            },
                            "src": "4952:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4944:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4944:23:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4151,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "4934:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4934:34:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4142,
                  "id": 4159,
                  "nodeType": "Return",
                  "src": "4927:41:11"
                }
              ]
            },
            "documentation": null,
            "id": 4161,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reciprocal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4138,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4161,
                  "src": "4771:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4137,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "4771:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4770:23:11"
            },
            "returnParameters": {
              "id": 4142,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4141,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4161,
                  "src": "4817:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4140,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "4817:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4816:18:11"
            },
            "scope": 4186,
            "src": "4751:225:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4184,
              "nodeType": "Block",
              "src": "5122:91:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4177,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4173,
                                          "name": "self",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4163,
                                          "src": "5182:4:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                            "typeString": "struct FixedPoint.uq112x112 memory"
                                          }
                                        },
                                        "id": 4174,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "_x",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3717,
                                        "src": "5182:7:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      ],
                                      "id": 4172,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5174:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 4175,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5174:16:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3332",
                                    "id": 4176,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5194:2:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  "src": "5174:22:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4170,
                                  "name": "Babylonian",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3711,
                                  "src": "5158:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Babylonian_$3711_$",
                                    "typeString": "type(library Babylonian)"
                                  }
                                },
                                "id": 4171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3710,
                                "src": "5158:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 4178,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5158:39:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3430",
                              "id": 4179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5201:2:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_40_by_1",
                                "typeString": "int_const 40"
                              },
                              "value": "40"
                            },
                            "src": "5158:45:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5150:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5150:54:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4168,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "5140:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5140:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4167,
                  "id": 4183,
                  "nodeType": "Return",
                  "src": "5133:72:11"
                }
              ]
            },
            "documentation": null,
            "id": 4185,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sqrt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4163,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4185,
                  "src": "5058:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4162,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "5058:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5057:23:11"
            },
            "returnParameters": {
              "id": 4167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4166,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4185,
                  "src": "5104:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4165,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "5104:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5103:18:11"
            },
            "scope": 4186,
            "src": "5044:169:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4187,
        "src": "188:5028:11"
      }
    ],
    "src": "0:5218:11"
  },
  "legacyAST": {
    "absolutePath": "@sonicxchain/soxswap-lib/contracts/libraries/FixedPoint.sol",
    "exportedSymbols": {
      "FixedPoint": [
        4186
      ]
    },
    "id": 4187,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3713,
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:11"
      },
      {
        "absolutePath": "@sonicxchain/soxswap-lib/contracts/libraries/FullMath.sol",
        "file": "./FullMath.sol",
        "id": 3714,
        "nodeType": "ImportDirective",
        "scope": 4187,
        "sourceUnit": 4380,
        "src": "28:24:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@sonicxchain/soxswap-lib/contracts/libraries/Babylonian.sol",
        "file": "./Babylonian.sol",
        "id": 3715,
        "nodeType": "ImportDirective",
        "scope": 4187,
        "sourceUnit": 3712,
        "src": "54:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4186,
        "linearizedBaseContracts": [
          4186
        ],
        "name": "FixedPoint",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "FixedPoint.uq112x112",
            "id": 3718,
            "members": [
              {
                "constant": false,
                "id": 3717,
                "name": "_x",
                "nodeType": "VariableDeclaration",
                "scope": 3718,
                "src": "304:10:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint224",
                  "typeString": "uint224"
                },
                "typeName": {
                  "id": 3716,
                  "name": "uint224",
                  "nodeType": "ElementaryTypeName",
                  "src": "304:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint224",
                    "typeString": "uint224"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "uq112x112",
            "nodeType": "StructDefinition",
            "scope": 4186,
            "src": "276:46:11",
            "visibility": "public"
          },
          {
            "canonicalName": "FixedPoint.uq144x112",
            "id": 3721,
            "members": [
              {
                "constant": false,
                "id": 3720,
                "name": "_x",
                "nodeType": "VariableDeclaration",
                "scope": 3721,
                "src": "420:10:11",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3719,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "420:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "uq144x112",
            "nodeType": "StructDefinition",
            "scope": 4186,
            "src": "392:46:11",
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 3724,
            "name": "RESOLUTION",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "446:39:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3722,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "446:5:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "313132",
              "id": 3723,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "482:3:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_112_by_1",
                "typeString": "int_const 112"
              },
              "value": "112"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3731,
            "name": "Q112",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "492:56:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3725,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "492:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 3730,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "arguments": [
                  {
                    "argumentTypes": null,
                    "hexValue": "31",
                    "id": 3727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "532:1:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  }
                ],
                "expression": {
                  "argumentTypes": [
                    {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    }
                  ],
                  "id": 3726,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "nodeType": "ElementaryTypeNameExpression",
                  "src": "524:7:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_uint256_$",
                    "typeString": "type(uint256)"
                  },
                  "typeName": "uint256"
                },
                "id": 3728,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "typeConversion",
                "lValueRequested": false,
                "names": [],
                "nodeType": "FunctionCall",
                "src": "524:10:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "argumentTypes": null,
                "id": 3729,
                "name": "RESOLUTION",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3724,
                "src": "538:10:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "src": "524:24:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3736,
            "name": "Q224",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "555:50:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3732,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "555:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              },
              "id": 3735,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "id": 3733,
                "name": "Q112",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3731,
                "src": "587:4:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "<<",
              "rightExpression": {
                "argumentTypes": null,
                "id": 3734,
                "name": "RESOLUTION",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 3724,
                "src": "595:10:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "src": "587:18:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 3739,
            "name": "LOWER_MASK",
            "nodeType": "VariableDeclaration",
            "scope": 4186,
            "src": "612:68:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3737,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "612:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "307866666666666666666666666666666666666666666666666666666666",
              "id": 3738,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "650:30:11",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_5192296858534827628530496329220095_by_1",
                "typeString": "int_const 5192...(26 digits omitted)...0095"
              },
              "value": "0xffffffffffffffffffffffffffff"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 3754,
              "nodeType": "Block",
              "src": "836:61:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3748,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3741,
                              "src": "872:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint112",
                                "typeString": "uint112"
                              }
                            ],
                            "id": 3747,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "864:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": "uint224"
                          },
                          "id": 3749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "864:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3750,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "878:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "864:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3746,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "854:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 3752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "854:35:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 3745,
                  "id": 3753,
                  "nodeType": "Return",
                  "src": "847:42:11"
                }
              ]
            },
            "documentation": null,
            "id": 3755,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3742,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3741,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "784:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 3740,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "784:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "783:11:11"
            },
            "returnParameters": {
              "id": 3745,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3744,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3755,
                  "src": "818:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3743,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "818:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "817:18:11"
            },
            "scope": 4186,
            "src": "768:129:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3770,
              "nodeType": "Block",
              "src": "1017:61:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3764,
                              "name": "x",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3757,
                              "src": "1053:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint144",
                                "typeString": "uint144"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint144",
                                "typeString": "uint144"
                              }
                            ],
                            "id": 3763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1045:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 3765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1045:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3766,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "1059:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1045:24:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3762,
                      "name": "uq144x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3721,
                      "src": "1035:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq144x112_$3721_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq144x112 storage pointer)"
                      }
                    },
                    "id": 3768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1035:35:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_memory",
                      "typeString": "struct FixedPoint.uq144x112 memory"
                    }
                  },
                  "functionReturnParameters": 3761,
                  "id": 3769,
                  "nodeType": "Return",
                  "src": "1028:42:11"
                }
              ]
            },
            "documentation": null,
            "id": 3771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "encode144",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3758,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3757,
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "scope": 3771,
                  "src": "965:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint144",
                    "typeString": "uint144"
                  },
                  "typeName": {
                    "id": 3756,
                    "name": "uint144",
                    "nodeType": "ElementaryTypeName",
                    "src": "965:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "964:11:11"
            },
            "returnParameters": {
              "id": 3761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3760,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3771,
                  "src": "999:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3759,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3721,
                    "src": "999:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "998:18:11"
            },
            "scope": 4186,
            "src": "946:132:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3785,
              "nodeType": "Block",
              "src": "1235:56:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3779,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3773,
                            "src": "1261:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3780,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "1261:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3781,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "1272:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1261:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3778,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1253:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3783,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1253:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "functionReturnParameters": 3777,
                  "id": 3784,
                  "nodeType": "Return",
                  "src": "1246:37:11"
                }
              ]
            },
            "documentation": null,
            "id": 3786,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decode",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3773,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3786,
                  "src": "1180:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3772,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "1180:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1179:23:11"
            },
            "returnParameters": {
              "id": 3777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3776,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3786,
                  "src": "1226:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 3775,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1225:9:11"
            },
            "scope": 4186,
            "src": "1164:127:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3800,
              "nodeType": "Block",
              "src": "1451:56:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3794,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3788,
                            "src": "1477:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                              "typeString": "struct FixedPoint.uq144x112 memory"
                            }
                          },
                          "id": 3795,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3720,
                          "src": "1477:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3796,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "1488:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "1477:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3793,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1469:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint144_$",
                        "typeString": "type(uint144)"
                      },
                      "typeName": "uint144"
                    },
                    "id": 3798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1469:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "functionReturnParameters": 3792,
                  "id": 3799,
                  "nodeType": "Return",
                  "src": "1462:37:11"
                }
              ]
            },
            "documentation": null,
            "id": 3801,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decode144",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3788,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3801,
                  "src": "1396:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3787,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3721,
                    "src": "1396:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1395:23:11"
            },
            "returnParameters": {
              "id": 3792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3791,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3801,
                  "src": "1442:7:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint144",
                    "typeString": "uint144"
                  },
                  "typeName": {
                    "id": 3790,
                    "name": "uint144",
                    "nodeType": "ElementaryTypeName",
                    "src": "1442:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1441:9:11"
            },
            "scope": 4186,
            "src": "1377:130:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3838,
              "nodeType": "Block",
              "src": "1693:152:11",
              "statements": [
                {
                  "assignments": [
                    3811
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3811,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 3838,
                      "src": "1704:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3810,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1704:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3813,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 3812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1716:1:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1704:13:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 3830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3817,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3815,
                            "name": "y",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3805,
                            "src": "1736:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 3816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1741:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1736:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3829,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 3826,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "id": 3823,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 3818,
                                    "name": "z",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3811,
                                    "src": "1747:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3822,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 3819,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3803,
                                        "src": "1751:4:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                          "typeString": "struct FixedPoint.uq112x112 memory"
                                        }
                                      },
                                      "id": 3820,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "_x",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3717,
                                      "src": "1751:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3821,
                                      "name": "y",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3805,
                                      "src": "1761:1:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1751:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1747:15:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 3824,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "1746:17:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 3825,
                              "name": "y",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3805,
                              "src": "1766:1:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1746:21:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 3827,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3803,
                              "src": "1771:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                "typeString": "struct FixedPoint.uq112x112 memory"
                              }
                            },
                            "id": 3828,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_x",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3717,
                            "src": "1771:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "1746:32:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1736:42:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c5f4f564552464c4f57",
                        "id": 3831,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1780:26:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                          "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                        },
                        "value": "FixedPoint: MUL_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_be2d4be71eb2194f98ae25808fa2a3e3d5bd0303cf4f11edea78e1e1eabb2653",
                          "typeString": "literal_string \"FixedPoint: MUL_OVERFLOW\""
                        }
                      ],
                      "id": 3814,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "1728:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3832,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1728:79:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3833,
                  "nodeType": "ExpressionStatement",
                  "src": "1728:79:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3835,
                        "name": "z",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3811,
                        "src": "1835:1:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3834,
                      "name": "uq144x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3721,
                      "src": "1825:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq144x112_$3721_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq144x112 storage pointer)"
                      }
                    },
                    "id": 3836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1825:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_memory",
                      "typeString": "struct FixedPoint.uq144x112 memory"
                    }
                  },
                  "functionReturnParameters": 3809,
                  "id": 3837,
                  "nodeType": "Return",
                  "src": "1818:19:11"
                }
              ]
            },
            "documentation": null,
            "id": 3839,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3806,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3803,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3839,
                  "src": "1618:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3802,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "1618:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3805,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 3839,
                  "src": "1641:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3804,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1641:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1617:34:11"
            },
            "returnParameters": {
              "id": 3809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3808,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3839,
                  "src": "1675:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                    "typeString": "struct FixedPoint.uq144x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3807,
                    "name": "uq144x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3721,
                    "src": "1675:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq144x112_$3721_storage_ptr",
                      "typeString": "struct FixedPoint.uq144x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1674:18:11"
            },
            "scope": 4186,
            "src": "1605:240:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3875,
              "nodeType": "Block",
              "src": "2027:116:11",
              "statements": [
                {
                  "assignments": [
                    3849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3849,
                      "name": "z",
                      "nodeType": "VariableDeclaration",
                      "scope": 3875,
                      "src": "2038:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      },
                      "typeName": {
                        "id": 3848,
                        "name": "uint144",
                        "nodeType": "ElementaryTypeName",
                        "src": "2038:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint144",
                          "typeString": "uint144"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3864,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3852,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3841,
                            "src": "2064:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 3856,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 3854,
                                    "name": "y",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3843,
                                    "src": "2078:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 3855,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2082:1:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "2078:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 3859,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3843,
                                  "src": "2091:1:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "id": 3860,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "2078:14:11",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "id": 3858,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "-",
                                  "prefix": true,
                                  "src": "2086:2:11",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 3857,
                                    "name": "y",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3843,
                                    "src": "2087:1:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 3853,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2070:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": "uint256"
                            },
                            "id": 3861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2070:23:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 3851,
                          "name": "mul",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3839,
                          "src": "2060:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_uq112x112_$3718_memory_ptr_$_t_uint256_$returns$_t_struct$_uq144x112_$3721_memory_ptr_$",
                            "typeString": "function (struct FixedPoint.uq112x112 memory,uint256) pure returns (struct FixedPoint.uq144x112 memory)"
                          }
                        },
                        "id": 3862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2060:34:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                          "typeString": "struct FixedPoint.uq144x112 memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_uq144x112_$3721_memory_ptr",
                          "typeString": "struct FixedPoint.uq144x112 memory"
                        }
                      ],
                      "id": 3850,
                      "name": "decode144",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3801,
                      "src": "2050:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_uq144x112_$3721_memory_ptr_$returns$_t_uint144_$",
                        "typeString": "function (struct FixedPoint.uq144x112 memory) pure returns (uint144)"
                      }
                    },
                    "id": 3863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2050:45:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint144",
                      "typeString": "uint144"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2038:57:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 3867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3865,
                        "name": "y",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3843,
                        "src": "2113:1:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2117:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2113:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 3872,
                      "name": "z",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3849,
                      "src": "2134:1:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      }
                    },
                    "id": 3873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "2113:22:11",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 3871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "-",
                      "prefix": true,
                      "src": "2121:10:11",
                      "subExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3869,
                            "name": "z",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3849,
                            "src": "2129:1:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint144",
                              "typeString": "uint144"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint144",
                              "typeString": "uint144"
                            }
                          ],
                          "id": 3868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2122:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": "int256"
                        },
                        "id": 3870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2122:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 3847,
                  "id": 3874,
                  "nodeType": "Return",
                  "src": "2106:29:11"
                }
              ]
            },
            "documentation": null,
            "id": 3876,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "muli",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3844,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3841,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 3876,
                  "src": "1963:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3840,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "1963:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3843,
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "scope": 3876,
                  "src": "1986:8:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 3842,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1986:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1962:33:11"
            },
            "returnParameters": {
              "id": 3847,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3846,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 3876,
                  "src": "2019:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 3845,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2019:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2018:8:11"
            },
            "scope": 4186,
            "src": "1949:194:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4011,
              "nodeType": "Block",
              "src": "2335:1183:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "id": 3888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3885,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3878,
                          "src": "2350:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 3886,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "2350:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2361:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2350:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "id": 3892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3889,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3880,
                          "src": "2366:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 3890,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "2366:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 3891,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2378:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2366:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2350:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3899,
                  "nodeType": "IfStatement",
                  "src": "2346:81:11",
                  "trueBody": {
                    "id": 3898,
                    "nodeType": "Block",
                    "src": "2381:46:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 3895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2413:1:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 3894,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3718,
                            "src": "2403:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 3896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2403:12:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 3884,
                        "id": 3897,
                        "nodeType": "Return",
                        "src": "2396:19:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    3901
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3901,
                      "name": "upper_self",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2437:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3900,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2437:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3908,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3903,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3878,
                            "src": "2466:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3904,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2466:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3905,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "2477:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "2466:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2458:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2458:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2437:51:11"
                },
                {
                  "assignments": [
                    3910
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3910,
                      "name": "lower_self",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2508:18:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3909,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2508:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3917,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3912,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3878,
                            "src": "2537:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3913,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2537:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3914,
                          "name": "LOWER_MASK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "2547:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2537:20:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3911,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2529:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2529:29:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2508:50:11"
                },
                {
                  "assignments": [
                    3919
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3919,
                      "name": "upper_other",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2581:19:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3918,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2581:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3926,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3921,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3880,
                            "src": "2611:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3922,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2611:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">>",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3923,
                          "name": "RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "2623:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "2611:22:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 3920,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2603:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2603:31:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2581:53:11"
                },
                {
                  "assignments": [
                    3928
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3928,
                      "name": "lower_other",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2654:19:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      },
                      "typeName": {
                        "id": 3927,
                        "name": "uint112",
                        "nodeType": "ElementaryTypeName",
                        "src": "2654:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3935,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3930,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3880,
                            "src": "2684:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 3931,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "2684:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3932,
                          "name": "LOWER_MASK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "2695:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2684:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3929,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2676:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint112_$",
                        "typeString": "type(uint112)"
                      },
                      "typeName": "uint112"
                    },
                    "id": 3934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2676:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2654:52:11"
                },
                {
                  "assignments": [
                    3937
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3937,
                      "name": "upper",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2760:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3936,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2760:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3943,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3942,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3939,
                          "name": "upper_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3901,
                          "src": "2784:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3938,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2776:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2776:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3941,
                      "name": "upper_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3919,
                      "src": "2798:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2776:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2760:49:11"
                },
                {
                  "assignments": [
                    3945
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3945,
                      "name": "lower",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2829:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3944,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2829:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3951,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3950,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3947,
                          "name": "lower_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3910,
                          "src": "2853:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2845:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3948,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2845:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3949,
                      "name": "lower_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3928,
                      "src": "2867:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2845:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2829:49:11"
                },
                {
                  "assignments": [
                    3953
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3953,
                      "name": "uppers_lowero",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2901:21:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3952,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2901:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3959,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3955,
                          "name": "upper_self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3901,
                          "src": "2933:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3954,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2925:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2925:19:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3957,
                      "name": "lower_other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3928,
                      "src": "2947:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "2925:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2901:57:11"
                },
                {
                  "assignments": [
                    3961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3961,
                      "name": "uppero_lowers",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "2981:21:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      },
                      "typeName": {
                        "id": 3960,
                        "name": "uint224",
                        "nodeType": "ElementaryTypeName",
                        "src": "2981:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3967,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 3966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3963,
                          "name": "upper_other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3919,
                          "src": "3013:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        ],
                        "id": 3962,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3005:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint224_$",
                          "typeString": "type(uint224)"
                        },
                        "typeName": "uint224"
                      },
                      "id": 3964,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3005:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3965,
                      "name": "lower_self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3910,
                      "src": "3028:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint112",
                        "typeString": "uint112"
                      }
                    },
                    "src": "3005:33:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2981:57:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 3974,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3969,
                          "name": "upper",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3937,
                          "src": "3118:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3972,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "3135:2:11",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3136:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 3970,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3127:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint112_$",
                              "typeString": "type(uint112)"
                            },
                            "typeName": "uint112"
                          },
                          "id": 3973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3127:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "src": "3118:20:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f5550504552",
                        "id": 3975,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3140:34:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                        },
                        "value": "FixedPoint: MULUQ_OVERFLOW_UPPER"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_539126dda09a0257d4f5544b4872275f1d3e0d4dd7e4a8f4f649b7b85ade12ef",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_UPPER\""
                        }
                      ],
                      "id": 3968,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "3110:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3110:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3977,
                  "nodeType": "ExpressionStatement",
                  "src": "3110:65:11"
                },
                {
                  "assignments": [
                    3979
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3979,
                      "name": "sum",
                      "nodeType": "VariableDeclaration",
                      "scope": 4011,
                      "src": "3253:11:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3978,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3253:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3994,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "id": 3983,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 3981,
                                "name": "upper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3937,
                                "src": "3275:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3982,
                                "name": "RESOLUTION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "3284:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "3275:19:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 3980,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3267:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint256"
                          },
                          "id": 3984,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3267:28:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3985,
                          "name": "uppers_lowero",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3953,
                          "src": "3298:13:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "3267:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 3987,
                        "name": "uppero_lowers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3961,
                        "src": "3314:13:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      "src": "3267:60:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          },
                          "id": 3991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3989,
                            "name": "lower",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3945,
                            "src": "3331:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">>",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3990,
                            "name": "RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3724,
                            "src": "3340:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "3331:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        }
                      ],
                      "id": 3992,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3330:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "3267:84:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3253:98:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4001,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3996,
                          "name": "sum",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3979,
                          "src": "3414:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3999,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "3429:2:11",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3998,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3430:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 3997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3421:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": "uint224"
                          },
                          "id": 4000,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3421:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "3414:18:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204d554c55515f4f564552464c4f575f53554d",
                        "id": 4002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3434:32:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                        },
                        "value": "FixedPoint: MULUQ_OVERFLOW_SUM"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed10647d1d56d8dfa5e692aff9922a0c4fdd3b351dd8fe34d459ce2b342e405e",
                          "typeString": "literal_string \"FixedPoint: MULUQ_OVERFLOW_SUM\""
                        }
                      ],
                      "id": 3995,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "3406:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3406:61:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4004,
                  "nodeType": "ExpressionStatement",
                  "src": "3406:61:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4007,
                            "name": "sum",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3979,
                            "src": "3505:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3497:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3497:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4005,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "3487:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3487:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 3884,
                  "id": 4010,
                  "nodeType": "Return",
                  "src": "3480:30:11"
                }
              ]
            },
            "documentation": null,
            "id": 4012,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "muluq",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3878,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4012,
                  "src": "2247:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3877,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "2247:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3880,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 4012,
                  "src": "2270:22:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3879,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "2270:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2246:47:11"
            },
            "returnParameters": {
              "id": 3884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3883,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4012,
                  "src": "2317:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 3882,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "2317:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2316:18:11"
            },
            "scope": 4186,
            "src": "2232:1286:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4107,
              "nodeType": "Block",
              "src": "3694:596:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 4025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4022,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4016,
                            "src": "3713:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 4023,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "3713:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3724:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3713:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f4449565551",
                        "id": 4026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3727:31:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_DIVUQ"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_17c163ab722223a7e87aead0e98bba666c61192e8c1b57b3ace2bb62ea553040",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_DIVUQ\""
                        }
                      ],
                      "id": 4021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "3705:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3705:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4028,
                  "nodeType": "ExpressionStatement",
                  "src": "3705:54:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 4033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4029,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4014,
                        "src": "3774:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 4030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "3774:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4031,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4016,
                        "src": "3785:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 4032,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "3785:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "src": "3774:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4041,
                  "nodeType": "IfStatement",
                  "src": "3770:83:11",
                  "trueBody": {
                    "id": 4040,
                    "nodeType": "Block",
                    "src": "3795:58:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4036,
                                  "name": "Q112",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3731,
                                  "src": "3835:4:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3827:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": "uint224"
                              },
                              "id": 4037,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3827:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 4034,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3718,
                            "src": "3817:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 4038,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3817:24:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 4020,
                        "id": 4039,
                        "nodeType": "Return",
                        "src": "3810:31:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint224",
                      "typeString": "uint224"
                    },
                    "id": 4048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4042,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4014,
                        "src": "3867:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                          "typeString": "struct FixedPoint.uq112x112 memory"
                        }
                      },
                      "id": 4043,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_x",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3717,
                      "src": "3867:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint224",
                        "typeString": "uint224"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "-",
                          "prefix": true,
                          "src": "3886:2:11",
                          "subExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 4045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3887:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_minus_1_by_1",
                            "typeString": "int_const -1"
                          }
                        ],
                        "id": 4044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3878:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint144_$",
                          "typeString": "type(uint144)"
                        },
                        "typeName": "uint144"
                      },
                      "id": 4047,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3878:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint144",
                        "typeString": "uint144"
                      }
                    },
                    "src": "3867:22:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4079,
                  "nodeType": "IfStatement",
                  "src": "3863:235:11",
                  "trueBody": {
                    "id": 4078,
                    "nodeType": "Block",
                    "src": "3891:207:11",
                    "statements": [
                      {
                        "assignments": [
                          4050
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4050,
                            "name": "value",
                            "nodeType": "VariableDeclaration",
                            "scope": 4078,
                            "src": "3906:13:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4049,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3906:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4061,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4052,
                                        "name": "self",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4014,
                                        "src": "3931:4:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                          "typeString": "struct FixedPoint.uq112x112 memory"
                                        }
                                      },
                                      "id": 4053,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "_x",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3717,
                                      "src": "3931:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint224",
                                        "typeString": "uint224"
                                      }
                                    ],
                                    "id": 4051,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3923:7:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint256"
                                  },
                                  "id": 4054,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3923:16:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 4055,
                                  "name": "RESOLUTION",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3724,
                                  "src": "3943:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "3923:30:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 4057,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "3922:32:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 4058,
                              "name": "other",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4016,
                              "src": "3957:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                "typeString": "struct FixedPoint.uq112x112 memory"
                              }
                            },
                            "id": 4059,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_x",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3717,
                            "src": "3957:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "3922:43:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3906:59:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 4068,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 4063,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4050,
                                "src": "3988:5:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "4005:2:11",
                                    "subExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 4065,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4006:1:11",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 4064,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3997:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": "uint224"
                                },
                                "id": 4067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3997:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "src": "3988:20:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                              "id": 4069,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4010:28:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                              },
                              "value": "FixedPoint: DIVUQ_OVERFLOW"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                                "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                              }
                            ],
                            "id": 4062,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4577,
                              4578
                            ],
                            "referencedDeclaration": 4578,
                            "src": "3980:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4070,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3980:59:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4071,
                        "nodeType": "ExpressionStatement",
                        "src": "3980:59:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4074,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4050,
                                  "src": "4079:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4073,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4071:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint224_$",
                                  "typeString": "type(uint224)"
                                },
                                "typeName": "uint224"
                              },
                              "id": 4075,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4071:14:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            ],
                            "id": 4072,
                            "name": "uq112x112",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3718,
                            "src": "4061:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                              "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                            }
                          },
                          "id": 4076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4061:25:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "functionReturnParameters": 4020,
                        "id": 4077,
                        "nodeType": "Return",
                        "src": "4054:32:11"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4081
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4081,
                      "name": "result",
                      "nodeType": "VariableDeclaration",
                      "scope": 4107,
                      "src": "4110:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4080,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4110:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4090,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4084,
                        "name": "Q112",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3731,
                        "src": "4143:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4085,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4014,
                          "src": "4149:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 4086,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "4149:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 4087,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4016,
                          "src": "4158:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                            "typeString": "struct FixedPoint.uq112x112 memory"
                          }
                        },
                        "id": 4088,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_x",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3717,
                        "src": "4158:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4082,
                        "name": "FullMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4379,
                        "src": "4127:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_FullMath_$4379_$",
                          "typeString": "type(library FullMath)"
                        }
                      },
                      "id": 4083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4378,
                      "src": "4127:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4127:40:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4110:57:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4092,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4081,
                          "src": "4186:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4095,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "4204:2:11",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 4094,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4205:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 4093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4196:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": "uint224"
                          },
                          "id": 4096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4196:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "src": "4186:21:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a2044495655515f4f564552464c4f57",
                        "id": 4098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4209:28:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                        },
                        "value": "FixedPoint: DIVUQ_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a54651753380997b91edda984d56ffa370134f66bce6a4aac5aa41ecd34aede5",
                          "typeString": "literal_string \"FixedPoint: DIVUQ_OVERFLOW\""
                        }
                      ],
                      "id": 4091,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "4178:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4178:60:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4100,
                  "nodeType": "ExpressionStatement",
                  "src": "4178:60:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4103,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4081,
                            "src": "4274:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4266:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4266:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4101,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "4256:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4256:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4020,
                  "id": 4106,
                  "nodeType": "Return",
                  "src": "4249:33:11"
                }
              ]
            },
            "documentation": null,
            "id": 4108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "divuq",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4014,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4108,
                  "src": "3606:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4013,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "3606:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4016,
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 4108,
                  "src": "3629:22:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4015,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "3629:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3605:47:11"
            },
            "returnParameters": {
              "id": 4020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4019,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4108,
                  "src": "3676:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4018,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "3676:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3675:18:11"
            },
            "scope": 4186,
            "src": "3591:699:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4135,
              "nodeType": "Block",
              "src": "4502:156:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "id": 4120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4118,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4112,
                          "src": "4521:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4535:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4521:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f4652414354494f4e",
                        "id": 4121,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4538:34:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_FRACTION"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d3bb2b1394a0ebfeaa64d5d26aef760856a492bbd6a20ab1a5b73fc2ae685f39",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_FRACTION\""
                        }
                      ],
                      "id": 4117,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "4513:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4122,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4513:60:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4123,
                  "nodeType": "ExpressionStatement",
                  "src": "4513:60:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 4132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              },
                              "id": 4129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4126,
                                    "name": "numerator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4110,
                                    "src": "4610:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint112",
                                      "typeString": "uint112"
                                    }
                                  ],
                                  "id": 4125,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4602:7:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": "uint224"
                                },
                                "id": 4127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4602:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint224",
                                  "typeString": "uint224"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 4128,
                                "name": "RESOLUTION",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "4624:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "4602:32:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            }
                          ],
                          "id": 4130,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4601:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4131,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4112,
                          "src": "4638:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "src": "4601:48:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4124,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "4591:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4133,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4591:59:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4116,
                  "id": 4134,
                  "nodeType": "Return",
                  "src": "4584:66:11"
                }
              ]
            },
            "documentation": null,
            "id": 4136,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "fraction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4110,
                  "name": "numerator",
                  "nodeType": "VariableDeclaration",
                  "scope": 4136,
                  "src": "4421:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 4109,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "4421:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4112,
                  "name": "denominator",
                  "nodeType": "VariableDeclaration",
                  "scope": 4136,
                  "src": "4440:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint112",
                    "typeString": "uint112"
                  },
                  "typeName": {
                    "id": 4111,
                    "name": "uint112",
                    "nodeType": "ElementaryTypeName",
                    "src": "4440:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint112",
                      "typeString": "uint112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4420:40:11"
            },
            "returnParameters": {
              "id": 4116,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4115,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4136,
                  "src": "4484:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4114,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "4484:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4483:18:11"
            },
            "scope": 4186,
            "src": "4403:255:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4160,
              "nodeType": "Block",
              "src": "4835:141:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "id": 4147,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4144,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4138,
                            "src": "4854:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                              "typeString": "struct FixedPoint.uq112x112 memory"
                            }
                          },
                          "id": 4145,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_x",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3717,
                          "src": "4854:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 4146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4864:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "4854:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4669786564506f696e743a204449565f42595f5a45524f5f5245434950524f43414c5f4f525f4f564552464c4f57",
                        "id": 4148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4867:48:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                        },
                        "value": "FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44e3924586e2f3a06e27e98bc8562a7e74980b7506825e88bdd7cb4e94825082",
                          "typeString": "literal_string \"FixedPoint: DIV_BY_ZERO_RECIPROCAL_OR_OVERFLOW\""
                        }
                      ],
                      "id": 4143,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4577,
                        4578
                      ],
                      "referencedDeclaration": 4578,
                      "src": "4846:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4846:70:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4150,
                  "nodeType": "ExpressionStatement",
                  "src": "4846:70:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 4153,
                              "name": "Q224",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3736,
                              "src": "4952:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 4154,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4138,
                                "src": "4959:4:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                  "typeString": "struct FixedPoint.uq112x112 memory"
                                }
                              },
                              "id": 4155,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_x",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3717,
                              "src": "4959:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint224",
                                "typeString": "uint224"
                              }
                            },
                            "src": "4952:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4944:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4944:23:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4151,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "4934:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4934:34:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4142,
                  "id": 4159,
                  "nodeType": "Return",
                  "src": "4927:41:11"
                }
              ]
            },
            "documentation": null,
            "id": 4161,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reciprocal",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4138,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4161,
                  "src": "4771:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4137,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "4771:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4770:23:11"
            },
            "returnParameters": {
              "id": 4142,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4141,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4161,
                  "src": "4817:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4140,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "4817:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4816:18:11"
            },
            "scope": 4186,
            "src": "4751:225:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4184,
              "nodeType": "Block",
              "src": "5122:91:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4177,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4173,
                                          "name": "self",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4163,
                                          "src": "5182:4:11",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                                            "typeString": "struct FixedPoint.uq112x112 memory"
                                          }
                                        },
                                        "id": 4174,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "_x",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3717,
                                        "src": "5182:7:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint224",
                                          "typeString": "uint224"
                                        }
                                      ],
                                      "id": 4172,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "5174:7:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint256"
                                    },
                                    "id": 4175,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5174:16:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "3332",
                                    "id": 4176,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5194:2:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  "src": "5174:22:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4170,
                                  "name": "Babylonian",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3711,
                                  "src": "5158:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Babylonian_$3711_$",
                                    "typeString": "type(library Babylonian)"
                                  }
                                },
                                "id": 4171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sqrt",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3710,
                                "src": "5158:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 4178,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5158:39:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "3430",
                              "id": 4179,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5201:2:11",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_40_by_1",
                                "typeString": "int_const 40"
                              },
                              "value": "40"
                            },
                            "src": "5158:45:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5150:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint224_$",
                            "typeString": "type(uint224)"
                          },
                          "typeName": "uint224"
                        },
                        "id": 4181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5150:54:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        }
                      ],
                      "id": 4168,
                      "name": "uq112x112",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3718,
                      "src": "5140:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_uq112x112_$3718_storage_ptr_$",
                        "typeString": "type(struct FixedPoint.uq112x112 storage pointer)"
                      }
                    },
                    "id": 4182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5140:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_memory",
                      "typeString": "struct FixedPoint.uq112x112 memory"
                    }
                  },
                  "functionReturnParameters": 4167,
                  "id": 4183,
                  "nodeType": "Return",
                  "src": "5133:72:11"
                }
              ]
            },
            "documentation": null,
            "id": 4185,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sqrt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4163,
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 4185,
                  "src": "5058:21:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4162,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "5058:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5057:23:11"
            },
            "returnParameters": {
              "id": 4167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4166,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4185,
                  "src": "5104:16:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_uq112x112_$3718_memory_ptr",
                    "typeString": "struct FixedPoint.uq112x112"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4165,
                    "name": "uq112x112",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3718,
                    "src": "5104:9:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_uq112x112_$3718_storage_ptr",
                      "typeString": "struct FixedPoint.uq112x112"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5103:18:11"
            },
            "scope": 4186,
            "src": "5044:169:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 4187,
        "src": "188:5028:11"
      }
    ],
    "src": "0:5218:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.4+commit.7b0de266.mod.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2020-12-15T09:23:58.349Z"
}