{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "invited",
          "type": "address"
        }
      ],
      "name": "Invite",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "kicked",
          "type": "address"
        }
      ],
      "name": "Kick",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract Member",
          "name": "member",
          "type": "address"
        }
      ],
      "name": "has",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "has(address)": {
        "notice": "Checks if this contract has a particular member."
      }
    }
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "details": "A collection of Ownable members who surrender some authority to an     association.",
    "methods": {
      "has(address)": {
        "details": "Returns true if the association has the given member.",
        "params": {
          "member": "An ownable contract that might belong to this association."
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "title": "Association"
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Association.sol",
    "exportedSymbols": {
      "Association": [
        4902
      ],
      "Context": [
        2404
      ],
      "ERC20": [
        690
      ],
      "IERC20": [
        768
      ],
      "IERC20Metadata": [
        793
      ],
      "Member": [
        5043
      ],
      "Ownable": [
        104
      ]
    },
    "id": 5044,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4803,
        "literals": [
          "solidity",
          "0.8",
          ".13"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:15"
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "id": 4804,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5044,
        "sourceUnit": 691,
        "src": "57:64:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "file": "openzeppelin-contracts/contracts/access/Ownable.sol",
        "id": 4805,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5044,
        "sourceUnit": 105,
        "src": "122:61:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/utils/Context.sol",
        "file": "openzeppelin-contracts/contracts/utils/Context.sol",
        "id": 4806,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5044,
        "sourceUnit": 2405,
        "src": "184:60:15",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 4808,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 104,
              "src": "399:7:15"
            },
            "id": 4809,
            "nodeType": "InheritanceSpecifier",
            "src": "399:7:15"
          }
        ],
        "canonicalName": "Association",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 4807,
          "nodeType": "StructuredDocumentation",
          "src": "246:120:15",
          "text": "@title Association\n @dev A collection of Ownable members who surrender some authority to an\n     association."
        },
        "fullyImplemented": true,
        "id": 4902,
        "linearizedBaseContracts": [
          4902,
          104,
          2404
        ],
        "name": "Association",
        "nameLocation": "384:11:15",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4814,
            "mutability": "mutable",
            "name": "_members",
            "nameLocation": "445:8:15",
            "nodeType": "VariableDeclaration",
            "scope": 4902,
            "src": "413:40:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_Member_$5043_$_t_bool_$",
              "typeString": "mapping(contract Member => bool)"
            },
            "typeName": {
              "id": 4813,
              "keyType": {
                "id": 4811,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 4810,
                  "name": "Member",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 5043,
                  "src": "421:6:15"
                },
                "referencedDeclaration": 5043,
                "src": "421:6:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_Member_$5043",
                  "typeString": "contract Member"
                }
              },
              "nodeType": "Mapping",
              "src": "413:23:15",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_Member_$5043_$_t_bool_$",
                "typeString": "mapping(contract Member => bool)"
              },
              "valueType": {
                "id": 4812,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "431:4:15",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 4822,
              "nodeType": "Block",
              "src": "474:47:15",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4818,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "503:3:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "503:10:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4817,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 103,
                      "src": "484:18:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 4820,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "484:30:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4821,
                  "nodeType": "ExpressionStatement",
                  "src": "484:30:15"
                }
              ]
            },
            "id": 4823,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4815,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "471:2:15"
            },
            "returnParameters": {
              "id": 4816,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "474:0:15"
            },
            "scope": 4902,
            "src": "460:61:15",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4836,
              "nodeType": "Block",
              "src": "565:83:15",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "baseExpression": {
                          "id": 4829,
                          "name": "_members",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4814,
                          "src": "583:8:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_contract$_Member_$5043_$_t_bool_$",
                            "typeString": "mapping(contract Member => bool)"
                          }
                        },
                        "id": 4831,
                        "indexExpression": {
                          "id": 4830,
                          "name": "member",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4826,
                          "src": "592:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Member_$5043",
                            "typeString": "contract Member"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "583:16:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4173736f63696174696f6e3a206e6f742061206d656d626572",
                        "id": 4832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "601:27:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7e93a464cf9a04b475e02a8b2e27a43dab47b7d39aea906469781aa8ddde56a3",
                          "typeString": "literal_string \"Association: not a member\""
                        },
                        "value": "Association: not a member"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7e93a464cf9a04b475e02a8b2e27a43dab47b7d39aea906469781aa8ddde56a3",
                          "typeString": "literal_string \"Association: not a member\""
                        }
                      ],
                      "id": 4828,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "575:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "575:54:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4834,
                  "nodeType": "ExpressionStatement",
                  "src": "575:54:15"
                },
                {
                  "id": 4835,
                  "nodeType": "PlaceholderStatement",
                  "src": "640:1:15"
                }
              ]
            },
            "id": 4837,
            "name": "requireMember",
            "nameLocation": "536:13:15",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4826,
                  "mutability": "mutable",
                  "name": "member",
                  "nameLocation": "557:6:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4837,
                  "src": "550:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Member_$5043",
                    "typeString": "contract Member"
                  },
                  "typeName": {
                    "id": 4825,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4824,
                      "name": "Member",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5043,
                      "src": "550:6:15"
                    },
                    "referencedDeclaration": 5043,
                    "src": "550:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Member_$5043",
                      "typeString": "contract Member"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "549:15:15"
            },
            "src": "527:121:15",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 4838,
              "nodeType": "StructuredDocumentation",
              "src": "654:77:15",
              "text": " @dev Emitted when `invited` is invited to the association."
            },
            "eventSelector": "36f0cb8524a0bfc7156d630b8ec256e3938c229292a93292b3495fbdb1778e89",
            "id": 4842,
            "name": "Invite",
            "nameLocation": "742:6:15",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4841,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4840,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "invited",
                  "nameLocation": "765:7:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4842,
                  "src": "749:23:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4839,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "749:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "748:25:15"
            },
            "src": "736:38:15"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 4843,
              "nodeType": "StructuredDocumentation",
              "src": "780:77:15",
              "text": " @dev Emitted when `kicked` is kicked from the association."
            },
            "eventSelector": "58f7375429b88b71c7aafaa4b1915f3ddf78e9725e737ac742f9f5a42012fef7",
            "id": 4847,
            "name": "Kick",
            "nameLocation": "868:4:15",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4845,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "kicked",
                  "nameLocation": "889:6:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4847,
                  "src": "873:22:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4844,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "873:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "872:24:15"
            },
            "src": "862:35:15"
          },
          {
            "body": {
              "id": 4866,
              "nodeType": "Block",
              "src": "944:78:15",
              "statements": [
                {
                  "expression": {
                    "id": 4857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4853,
                        "name": "_members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4814,
                        "src": "954:8:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_Member_$5043_$_t_bool_$",
                          "typeString": "mapping(contract Member => bool)"
                        }
                      },
                      "id": 4855,
                      "indexExpression": {
                        "id": 4854,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4850,
                        "src": "963:6:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Member_$5043",
                          "typeString": "contract Member"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "954:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 4856,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "973:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "954:23:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4858,
                  "nodeType": "ExpressionStatement",
                  "src": "954:23:15"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4862,
                            "name": "member",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4850,
                            "src": "1007:6:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Member_$5043",
                              "typeString": "contract Member"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Member_$5043",
                              "typeString": "contract Member"
                            }
                          ],
                          "id": 4861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "999:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4860,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "999:7:15",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "999:15:15",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4859,
                      "name": "Invite",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4842,
                      "src": "992:6:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 4864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "992:23:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4865,
                  "nodeType": "EmitStatement",
                  "src": "987:28:15"
                }
              ]
            },
            "id": 4867,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_invite",
            "nameLocation": "912:7:15",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4850,
                  "mutability": "mutable",
                  "name": "member",
                  "nameLocation": "927:6:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4867,
                  "src": "920:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Member_$5043",
                    "typeString": "contract Member"
                  },
                  "typeName": {
                    "id": 4849,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4848,
                      "name": "Member",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5043,
                      "src": "920:6:15"
                    },
                    "referencedDeclaration": 5043,
                    "src": "920:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Member_$5043",
                      "typeString": "contract Member"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "919:15:15"
            },
            "returnParameters": {
              "id": 4852,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "944:0:15"
            },
            "scope": 4902,
            "src": "903:119:15",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4886,
              "nodeType": "Block",
              "src": "1067:77:15",
              "statements": [
                {
                  "expression": {
                    "id": 4877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4873,
                        "name": "_members",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4814,
                        "src": "1077:8:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_Member_$5043_$_t_bool_$",
                          "typeString": "mapping(contract Member => bool)"
                        }
                      },
                      "id": 4875,
                      "indexExpression": {
                        "id": 4874,
                        "name": "member",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4870,
                        "src": "1086:6:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Member_$5043",
                          "typeString": "contract Member"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1077:16:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 4876,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1096:5:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "1077:24:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4878,
                  "nodeType": "ExpressionStatement",
                  "src": "1077:24:15"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4882,
                            "name": "member",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4870,
                            "src": "1129:6:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Member_$5043",
                              "typeString": "contract Member"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Member_$5043",
                              "typeString": "contract Member"
                            }
                          ],
                          "id": 4881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1121:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4880,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1121:7:15",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4883,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1121:15:15",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4879,
                      "name": "Kick",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4847,
                      "src": "1116:4:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 4884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1116:21:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4885,
                  "nodeType": "EmitStatement",
                  "src": "1111:26:15"
                }
              ]
            },
            "id": 4887,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_kick",
            "nameLocation": "1037:5:15",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4871,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4870,
                  "mutability": "mutable",
                  "name": "member",
                  "nameLocation": "1050:6:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4887,
                  "src": "1043:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Member_$5043",
                    "typeString": "contract Member"
                  },
                  "typeName": {
                    "id": 4869,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4868,
                      "name": "Member",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5043,
                      "src": "1043:6:15"
                    },
                    "referencedDeclaration": 5043,
                    "src": "1043:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Member_$5043",
                      "typeString": "contract Member"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1042:15:15"
            },
            "returnParameters": {
              "id": 4872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1067:0:15"
            },
            "scope": 4902,
            "src": "1028:116:15",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4900,
              "nodeType": "Block",
              "src": "1426:40:15",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 4896,
                      "name": "_members",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4814,
                      "src": "1443:8:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_Member_$5043_$_t_bool_$",
                        "typeString": "mapping(contract Member => bool)"
                      }
                    },
                    "id": 4898,
                    "indexExpression": {
                      "id": 4897,
                      "name": "member",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4891,
                      "src": "1452:6:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Member_$5043",
                        "typeString": "contract Member"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1443:16:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4895,
                  "id": 4899,
                  "nodeType": "Return",
                  "src": "1436:23:15"
                }
              ]
            },
            "documentation": {
              "id": 4888,
              "nodeType": "StructuredDocumentation",
              "src": "1150:208:15",
              "text": "@notice Checks if this contract has a particular member.\n @dev Returns true if the association has the given member.\n @param member An ownable contract that might belong to this association."
            },
            "functionSelector": "21887c3d",
            "id": 4901,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "has",
            "nameLocation": "1372:3:15",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4892,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4891,
                  "mutability": "mutable",
                  "name": "member",
                  "nameLocation": "1383:6:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4901,
                  "src": "1376:13:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Member_$5043",
                    "typeString": "contract Member"
                  },
                  "typeName": {
                    "id": 4890,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4889,
                      "name": "Member",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5043,
                      "src": "1376:6:15"
                    },
                    "referencedDeclaration": 5043,
                    "src": "1376:6:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Member_$5043",
                      "typeString": "contract Member"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1375:15:15"
            },
            "returnParameters": {
              "id": 4895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4894,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4901,
                  "src": "1420:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4893,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1420:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1419:6:15"
            },
            "scope": 4902,
            "src": "1363:103:15",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          }
        ],
        "scope": 5044,
        "src": "366:1102:15",
        "usedErrors": []
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 4903,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2404,
              "src": "1498:7:15"
            },
            "id": 4904,
            "nodeType": "InheritanceSpecifier",
            "src": "1498:7:15"
          },
          {
            "baseName": {
              "id": 4905,
              "name": "Ownable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 104,
              "src": "1507:7:15"
            },
            "id": 4906,
            "nodeType": "InheritanceSpecifier",
            "src": "1507:7:15"
          }
        ],
        "canonicalName": "Member",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 5043,
        "linearizedBaseContracts": [
          5043,
          104,
          2404
        ],
        "name": "Member",
        "nameLocation": "1488:6:15",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4909,
            "mutability": "mutable",
            "name": "_association",
            "nameLocation": "1541:12:15",
            "nodeType": "VariableDeclaration",
            "scope": 5043,
            "src": "1521:32:15",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_Association_$4902",
              "typeString": "contract Association"
            },
            "typeName": {
              "id": 4908,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 4907,
                "name": "Association",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 4902,
                "src": "1521:11:15"
              },
              "referencedDeclaration": 4902,
              "src": "1521:11:15",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Association_$4902",
                "typeString": "contract Association"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 4951,
              "nodeType": "Block",
              "src": "1682:325:15",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 4915,
                              "name": "_association",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4909,
                              "src": "1708:12:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Association_$4902",
                                "typeString": "contract Association"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_Association_$4902",
                                "typeString": "contract Association"
                              }
                            ],
                            "id": 4914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1700:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4913,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1700:7:15",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1700:21:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4919,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1733:1:15",
                              "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": 4918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1725:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4917,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "1725:7:15",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4920,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1725:10:15",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1700:35:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4912,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1692:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4922,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1692:44:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4923,
                  "nodeType": "ExpressionStatement",
                  "src": "1692:44:15"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4946,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4937,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 4929,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 4925,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1767:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4926,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1767:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 4927,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32,
                                "src": "1781:5:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 4928,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1781:7:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "1767:21:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 4936,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 4930,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1808:3:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4931,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1808:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "id": 4932,
                                    "name": "association",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4986,
                                    "src": "1822:11:15",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_Association_$4902_$",
                                      "typeString": "function () view returns (contract Association)"
                                    }
                                  },
                                  "id": 4933,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1822:13:15",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Association_$4902",
                                    "typeString": "contract Association"
                                  }
                                },
                                "id": 4934,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "owner",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 32,
                                "src": "1822:19:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 4935,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1822:21:15",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "1808:35:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1767:76:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 4945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4938,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "1863:3:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4939,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1863:10:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 4942,
                                  "name": "association",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4986,
                                  "src": "1885:11:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_Association_$4902_$",
                                    "typeString": "function () view returns (contract Association)"
                                  }
                                },
                                "id": 4943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1885:13:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Association_$4902",
                                  "typeString": "contract Association"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Association_$4902",
                                  "typeString": "contract Association"
                                }
                              ],
                              "id": 4941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1877:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 4940,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1877:7:15",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1877:22:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1863:36:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1767:132:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d656d6265723a2063616c6c6572206973206e6f7420746865206f776e65722c206173736f63696174696f6e2c206173736f63696174696f6e206f776e6572",
                        "id": 4947,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1913:65:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cd3478e3aa3e2bf5a28e5f5fb8dcdaaada450c7bcddcb3a42f3d513c90aead7e",
                          "typeString": "literal_string \"Member: caller is not the owner, association, association owner\""
                        },
                        "value": "Member: caller is not the owner, association, association owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cd3478e3aa3e2bf5a28e5f5fb8dcdaaada450c7bcddcb3a42f3d513c90aead7e",
                          "typeString": "literal_string \"Member: caller is not the owner, association, association owner\""
                        }
                      ],
                      "id": 4924,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1746:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1746:242:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4949,
                  "nodeType": "ExpressionStatement",
                  "src": "1746:242:15"
                },
                {
                  "id": 4950,
                  "nodeType": "PlaceholderStatement",
                  "src": "1999:1:15"
                }
              ]
            },
            "documentation": {
              "id": 4910,
              "nodeType": "StructuredDocumentation",
              "src": "1560:83:15",
              "text": "@dev Reverts if the caller is not the owner, association, or association owner."
            },
            "id": 4952,
            "name": "onlyOwnerOrAssociation",
            "nameLocation": "1657:22:15",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4911,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1679:2:15"
            },
            "src": "1648:359:15",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 4953,
              "nodeType": "StructuredDocumentation",
              "src": "2013:64:15",
              "text": " @dev Emitted when member joins `association`."
            },
            "eventSelector": "d644dc7fcd33e8f50b196f5d8efabdaea1758e024467b0c26ca395105c4becfb",
            "id": 4957,
            "name": "SetAssociation",
            "nameLocation": "2088:14:15",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 4956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4955,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "association",
                  "nameLocation": "2119:11:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4957,
                  "src": "2103:27:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4954,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2103:7:15",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2102:29:15"
            },
            "src": "2082:50:15"
          },
          {
            "body": {
              "id": 4975,
              "nodeType": "Block",
              "src": "2252:102:15",
              "statements": [
                {
                  "expression": {
                    "id": 4966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4964,
                      "name": "_association",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4909,
                      "src": "2262:12:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Association_$4902",
                        "typeString": "contract Association"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4965,
                      "name": "someAssociation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4961,
                      "src": "2277:15:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Association_$4902",
                        "typeString": "contract Association"
                      }
                    },
                    "src": "2262:30:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "id": 4967,
                  "nodeType": "ExpressionStatement",
                  "src": "2262:30:15"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4971,
                            "name": "someAssociation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4961,
                            "src": "2330:15:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Association_$4902",
                              "typeString": "contract Association"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Association_$4902",
                              "typeString": "contract Association"
                            }
                          ],
                          "id": 4970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2322:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 4969,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2322:7:15",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4972,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2322:24:15",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4968,
                      "name": "SetAssociation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4957,
                      "src": "2307:14:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 4973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2307:40:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4974,
                  "nodeType": "EmitStatement",
                  "src": "2302:45:15"
                }
              ]
            },
            "documentation": {
              "id": 4958,
              "nodeType": "StructuredDocumentation",
              "src": "2138:46:15",
              "text": " @dev Sets a new association"
            },
            "id": 4976,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setAssociation",
            "nameLocation": "2198:15:15",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4961,
                  "mutability": "mutable",
                  "name": "someAssociation",
                  "nameLocation": "2226:15:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 4976,
                  "src": "2214:27:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Association_$4902",
                    "typeString": "contract Association"
                  },
                  "typeName": {
                    "id": 4960,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4959,
                      "name": "Association",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4902,
                      "src": "2214:11:15"
                    },
                    "referencedDeclaration": 4902,
                    "src": "2214:11:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2213:29:15"
            },
            "returnParameters": {
              "id": 4963,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2252:0:15"
            },
            "scope": 5043,
            "src": "2189:165:15",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4985,
              "nodeType": "Block",
              "src": "2469:36:15",
              "statements": [
                {
                  "expression": {
                    "id": 4983,
                    "name": "_association",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4909,
                    "src": "2486:12:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "functionReturnParameters": 4982,
                  "id": 4984,
                  "nodeType": "Return",
                  "src": "2479:19:15"
                }
              ]
            },
            "documentation": {
              "id": 4977,
              "nodeType": "StructuredDocumentation",
              "src": "2360:47:15",
              "text": " @dev Returns the association"
            },
            "functionSelector": "050d4f78",
            "id": 4986,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "association",
            "nameLocation": "2421:11:15",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4978,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2432:2:15"
            },
            "returnParameters": {
              "id": 4982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4981,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4986,
                  "src": "2456:11:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Association_$4902",
                    "typeString": "contract Association"
                  },
                  "typeName": {
                    "id": 4980,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4979,
                      "name": "Association",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4902,
                      "src": "2456:11:15"
                    },
                    "referencedDeclaration": 4902,
                    "src": "2456:11:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2455:13:15"
            },
            "scope": 5043,
            "src": "2412:93:15",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5003,
              "nodeType": "Block",
              "src": "2630:84:15",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_contract$_Association_$4902",
                        "typeString": "contract Association"
                      },
                      "id": 4996,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4994,
                        "name": "someAssociation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4989,
                        "src": "2647:15:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Association_$4902",
                          "typeString": "contract Association"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 4995,
                        "name": "_association",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4909,
                        "src": "2666:12:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Association_$4902",
                          "typeString": "contract Association"
                        }
                      },
                      "src": "2647:31:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 4999,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "2702:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Member_$5043",
                            "typeString": "contract Member"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Member_$5043",
                            "typeString": "contract Member"
                          }
                        ],
                        "expression": {
                          "id": 4997,
                          "name": "someAssociation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4989,
                          "src": "2682:15:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Association_$4902",
                            "typeString": "contract Association"
                          }
                        },
                        "id": 4998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "has",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4901,
                        "src": "2682:19:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_contract$_Member_$5043_$returns$_t_bool_$",
                          "typeString": "function (contract Member) view external returns (bool)"
                        }
                      },
                      "id": 5000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2682:25:15",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2647:60:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4993,
                  "id": 5002,
                  "nodeType": "Return",
                  "src": "2640:67:15"
                }
              ]
            },
            "functionSelector": "8662d3ae",
            "id": 5004,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "belongsTo",
            "nameLocation": "2520:9:15",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4989,
                  "mutability": "mutable",
                  "name": "someAssociation",
                  "nameLocation": "2542:15:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 5004,
                  "src": "2530:27:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Association_$4902",
                    "typeString": "contract Association"
                  },
                  "typeName": {
                    "id": 4988,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4987,
                      "name": "Association",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4902,
                      "src": "2530:11:15"
                    },
                    "referencedDeclaration": 4902,
                    "src": "2530:11:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2529:29:15"
            },
            "returnParameters": {
              "id": 4993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4992,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5004,
                  "src": "2620:4:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2620:4:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2619:6:15"
            },
            "scope": 5043,
            "src": "2511:203:15",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5017,
              "nodeType": "Block",
              "src": "2775:151:15",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5011,
                            "name": "someAssociation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5007,
                            "src": "2816:15:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Association_$4902",
                              "typeString": "contract Association"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Association_$4902",
                              "typeString": "contract Association"
                            }
                          ],
                          "id": 5010,
                          "name": "belongsTo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5004,
                          "src": "2806:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_contract$_Association_$4902_$returns$_t_bool_$",
                            "typeString": "function (contract Association) view returns (bool)"
                          }
                        },
                        "id": 5012,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2806:26:15",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d656d6265723a2063616c6c6572206973206e6f742061206d656d626572206f6620746865206173736f63696174696f6e",
                        "id": 5013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2846:51:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2b756ed5f7d6ba55c96973c8099bddcccd9f8bbd52dbbe419db5570541b8b792",
                          "typeString": "literal_string \"Member: caller is not a member of the association\""
                        },
                        "value": "Member: caller is not a member of the association"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2b756ed5f7d6ba55c96973c8099bddcccd9f8bbd52dbbe419db5570541b8b792",
                          "typeString": "literal_string \"Member: caller is not a member of the association\""
                        }
                      ],
                      "id": 5009,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2785:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2785:122:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5015,
                  "nodeType": "ExpressionStatement",
                  "src": "2785:122:15"
                },
                {
                  "id": 5016,
                  "nodeType": "PlaceholderStatement",
                  "src": "2918:1:15"
                }
              ]
            },
            "id": 5018,
            "name": "requireBelongsTo",
            "nameLocation": "2729:16:15",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 5008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5007,
                  "mutability": "mutable",
                  "name": "someAssociation",
                  "nameLocation": "2758:15:15",
                  "nodeType": "VariableDeclaration",
                  "scope": 5018,
                  "src": "2746:27:15",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Association_$4902",
                    "typeString": "contract Association"
                  },
                  "typeName": {
                    "id": 5006,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5005,
                      "name": "Association",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4902,
                      "src": "2746:11:15"
                    },
                    "referencedDeclaration": 4902,
                    "src": "2746:11:15",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2745:29:15"
            },
            "src": "2720:206:15",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5041,
              "nodeType": "Block",
              "src": "3071:206:15",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5036,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 5024,
                                  "name": "association",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4986,
                                  "src": "3110:11:15",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_Association_$4902_$",
                                    "typeString": "function () view returns (contract Association)"
                                  }
                                },
                                "id": 5025,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3110:13:15",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Association_$4902",
                                  "typeString": "contract Association"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Association_$4902",
                                  "typeString": "contract Association"
                                }
                              ],
                              "id": 5023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3102:7:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 5022,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3102:7:15",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3102:22:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5027,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2394,
                              "src": "3128:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 5028,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3128:12:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3102:38:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 5030,
                                "name": "_association",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4909,
                                "src": "3160:12:15",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Association_$4902",
                                  "typeString": "contract Association"
                                }
                              },
                              "id": 5031,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "owner",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32,
                              "src": "3160:18:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 5032,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3160:20:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5033,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2394,
                              "src": "3184:10:15",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 5034,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3184:12:15",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3160:36:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3102:94:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d656d6265723a2063616c6c6572206973206e6f7420746865206173736f63696174696f6e",
                        "id": 5037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3210:39:15",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed6d904e3951456bde4a1720103b26b4888c83cbe2b12479853671e142876b6e",
                          "typeString": "literal_string \"Member: caller is not the association\""
                        },
                        "value": "Member: caller is not the association"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed6d904e3951456bde4a1720103b26b4888c83cbe2b12479853671e142876b6e",
                          "typeString": "literal_string \"Member: caller is not the association\""
                        }
                      ],
                      "id": 5021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3081:7:15",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3081:178:15",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5039,
                  "nodeType": "ExpressionStatement",
                  "src": "3081:178:15"
                },
                {
                  "id": 5040,
                  "nodeType": "PlaceholderStatement",
                  "src": "3269:1:15"
                }
              ]
            },
            "documentation": {
              "id": 5019,
              "nodeType": "StructuredDocumentation",
              "src": "2932:107:15",
              "text": " @dev Throws if called by any account other than the association or the association owner"
            },
            "id": 5042,
            "name": "onlyAssociation",
            "nameLocation": "3053:15:15",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 5020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3068:2:15"
            },
            "src": "3044:233:15",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 5044,
        "src": "1470:1809:15",
        "usedErrors": []
      }
    ],
    "src": "32:3248:15"
  }
}