{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    }
  ],
  "allSourcePaths": {
    "69": "node_modules/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol",
    "70": "node_modules/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol",
    "71": "node_modules/@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol",
    "72": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
    "82": "node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
    "85": "node_modules/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol"
  },
  "ast": {
    "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        16246
      ],
      "ERC1967UpgradeUpgradeable": [
        25978
      ],
      "IBeaconUpgradeable": [
        27579
      ],
      "IERC1822ProxiableUpgradeable": [
        25609
      ],
      "Initializable": [
        19544
      ],
      "StorageSlotUpgradeable": [
        27639
      ]
    },
    "id": 25979,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 25611,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "116:23:70"
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol",
        "file": "../beacon/IBeaconUpgradeable.sol",
        "id": 25612,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 25979,
        "sourceUnit": 27580,
        "src": "141:42:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol",
        "file": "../../interfaces/draft-IERC1822Upgradeable.sol",
        "id": 25613,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 25979,
        "sourceUnit": 25610,
        "src": "184:56:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
        "file": "../../utils/AddressUpgradeable.sol",
        "id": 25614,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 25979,
        "sourceUnit": 16247,
        "src": "241:44:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol",
        "file": "../../utils/StorageSlotUpgradeable.sol",
        "id": 25615,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 25979,
        "sourceUnit": 27640,
        "src": "286:48:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
        "file": "../utils/Initializable.sol",
        "id": 25616,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 25979,
        "sourceUnit": 19545,
        "src": "335:36:70",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 25618,
              "name": "Initializable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19544,
              "src": "657:13:70"
            },
            "id": 25619,
            "nodeType": "InheritanceSpecifier",
            "src": "657:13:70"
          }
        ],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 25617,
          "nodeType": "StructuredDocumentation",
          "src": "373:236:70",
          "text": " @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"
        },
        "fullyImplemented": true,
        "id": 25978,
        "linearizedBaseContracts": [
          25978,
          19544
        ],
        "name": "ERC1967UpgradeUpgradeable",
        "nameLocation": "628:25:70",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 25624,
              "nodeType": "Block",
              "src": "736:7:70",
              "statements": []
            },
            "id": 25625,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25622,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 25621,
                  "name": "onlyInitializing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19528,
                  "src": "719:16:70"
                },
                "nodeType": "ModifierInvocation",
                "src": "719:16:70"
              }
            ],
            "name": "__ERC1967Upgrade_init",
            "nameLocation": "686:21:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "707:2:70"
            },
            "returnParameters": {
              "id": 25623,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "736:0:70"
            },
            "scope": 25978,
            "src": "677:66:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25630,
              "nodeType": "Block",
              "src": "818:7:70",
              "statements": []
            },
            "id": 25631,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 25628,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 25627,
                  "name": "onlyInitializing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19528,
                  "src": "801:16:70"
                },
                "nodeType": "ModifierInvocation",
                "src": "801:16:70"
              }
            ],
            "name": "__ERC1967Upgrade_init_unchained",
            "nameLocation": "758:31:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25626,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "789:2:70"
            },
            "returnParameters": {
              "id": 25629,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "818:0:70"
            },
            "scope": 25978,
            "src": "749:76:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 25634,
            "mutability": "constant",
            "name": "_ROLLBACK_SLOT",
            "nameLocation": "934:14:70",
            "nodeType": "VariableDeclaration",
            "scope": 25978,
            "src": "909:108:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 25632,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "909:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433",
              "id": 25633,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "951:66:70",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1",
                "typeString": "int_const 3304...(69 digits omitted)...9347"
              },
              "value": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 25635,
              "nodeType": "StructuredDocumentation",
              "src": "1024:214:70",
              "text": " @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."
            },
            "id": 25638,
            "mutability": "constant",
            "name": "_IMPLEMENTATION_SLOT",
            "nameLocation": "1269:20:70",
            "nodeType": "VariableDeclaration",
            "scope": 25978,
            "src": "1243:115:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 25636,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1243:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263",
              "id": 25637,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1292:66:70",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1",
                "typeString": "int_const 2444...(69 digits omitted)...5612"
              },
              "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 25639,
              "nodeType": "StructuredDocumentation",
              "src": "1365:68:70",
              "text": " @dev Emitted when the implementation is upgraded."
            },
            "id": 25643,
            "name": "Upgraded",
            "nameLocation": "1444:8:70",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25641,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "1469:14:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25643,
                  "src": "1453:30:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25640,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1453:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1452:32:70"
            },
            "src": "1438:47:70"
          },
          {
            "body": {
              "id": 25655,
              "nodeType": "Block",
              "src": "1625:89:70",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 25651,
                          "name": "_IMPLEMENTATION_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25638,
                          "src": "1680:20:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 25649,
                          "name": "StorageSlotUpgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27639,
                          "src": "1642:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                            "typeString": "type(library StorageSlotUpgradeable)"
                          }
                        },
                        "id": 25650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27605,
                        "src": "1642:37:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27585_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.AddressSlot storage pointer)"
                        }
                      },
                      "id": 25652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1642:59:70",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$27585_storage_ptr",
                        "typeString": "struct StorageSlotUpgradeable.AddressSlot storage pointer"
                      }
                    },
                    "id": 25653,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27584,
                    "src": "1642:65:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 25648,
                  "id": 25654,
                  "nodeType": "Return",
                  "src": "1635:72:70"
                }
              ]
            },
            "documentation": {
              "id": 25644,
              "nodeType": "StructuredDocumentation",
              "src": "1491:67:70",
              "text": " @dev Returns the current implementation address."
            },
            "id": 25656,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getImplementation",
            "nameLocation": "1572:18:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25645,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1590:2:70"
            },
            "returnParameters": {
              "id": 25648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25647,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25656,
                  "src": "1616:7:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25646,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1616:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1615:9:70"
            },
            "scope": 25978,
            "src": "1563:151:70",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25679,
              "nodeType": "Block",
              "src": "1868:218:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25665,
                            "name": "newImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25659,
                            "src": "1916:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 25663,
                            "name": "AddressUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16246,
                            "src": "1886:18:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_AddressUpgradeable_$16246_$",
                              "typeString": "type(library AddressUpgradeable)"
                            }
                          },
                          "id": 25664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16021,
                          "src": "1886:29:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 25666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1886:48:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374",
                        "id": 25667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1936:47:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65",
                          "typeString": "literal_string \"ERC1967: new implementation is not a contract\""
                        },
                        "value": "ERC1967: new implementation is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65",
                          "typeString": "literal_string \"ERC1967: new implementation is not a contract\""
                        }
                      ],
                      "id": 25662,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1878:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1878:106:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25669,
                  "nodeType": "ExpressionStatement",
                  "src": "1878:106:70"
                },
                {
                  "expression": {
                    "id": 25677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 25673,
                            "name": "_IMPLEMENTATION_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25638,
                            "src": "2032:20:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 25670,
                            "name": "StorageSlotUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27639,
                            "src": "1994:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                              "typeString": "type(library StorageSlotUpgradeable)"
                            }
                          },
                          "id": 25672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27605,
                          "src": "1994:37:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27585_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.AddressSlot storage pointer)"
                          }
                        },
                        "id": 25674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1994:59:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$27585_storage_ptr",
                          "typeString": "struct StorageSlotUpgradeable.AddressSlot storage pointer"
                        }
                      },
                      "id": 25675,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27584,
                      "src": "1994:65:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 25676,
                      "name": "newImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25659,
                      "src": "2062:17:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1994:85:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 25678,
                  "nodeType": "ExpressionStatement",
                  "src": "1994:85:70"
                }
              ]
            },
            "documentation": {
              "id": 25657,
              "nodeType": "StructuredDocumentation",
              "src": "1720:80:70",
              "text": " @dev Stores a new address in the EIP1967 implementation slot."
            },
            "id": 25680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setImplementation",
            "nameLocation": "1814:18:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25660,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25659,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "1841:17:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25680,
                  "src": "1833:25:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25658,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1833:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1832:27:70"
            },
            "returnParameters": {
              "id": 25661,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1868:0:70"
            },
            "scope": 25978,
            "src": "1805:281:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 25694,
              "nodeType": "Block",
              "src": "2248:96:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25687,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25683,
                        "src": "2277:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25686,
                      "name": "_setImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25680,
                      "src": "2258:18:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2258:37:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25689,
                  "nodeType": "ExpressionStatement",
                  "src": "2258:37:70"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 25691,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25683,
                        "src": "2319:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25690,
                      "name": "Upgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25643,
                      "src": "2310:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2310:27:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25693,
                  "nodeType": "EmitStatement",
                  "src": "2305:32:70"
                }
              ]
            },
            "documentation": {
              "id": 25681,
              "nodeType": "StructuredDocumentation",
              "src": "2092:95:70",
              "text": " @dev Perform implementation upgrade\n Emits an {Upgraded} event."
            },
            "id": 25695,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeTo",
            "nameLocation": "2201:10:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25683,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2220:17:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25695,
                  "src": "2212:25:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25682,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2212:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2211:27:70"
            },
            "returnParameters": {
              "id": 25685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2248:0:70"
            },
            "scope": 25978,
            "src": "2192:152:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25722,
              "nodeType": "Block",
              "src": "2606:160:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25706,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25698,
                        "src": "2627:17:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25705,
                      "name": "_upgradeTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25695,
                      "src": "2616:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2616:29:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25708,
                  "nodeType": "ExpressionStatement",
                  "src": "2616:29:70"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 25714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25712,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 25709,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25700,
                          "src": "2659:4:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2659:11:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 25711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2673:1:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2659:15:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "id": 25713,
                      "name": "forceCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25702,
                      "src": "2678:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2659:28:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25721,
                  "nodeType": "IfStatement",
                  "src": "2655:105:70",
                  "trueBody": {
                    "id": 25720,
                    "nodeType": "Block",
                    "src": "2689:71:70",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 25716,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25698,
                              "src": "2725:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 25717,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25700,
                              "src": "2744:4:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 25715,
                            "name": "_functionDelegateCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25972,
                            "src": "2703:21:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 25718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2703:46:70",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25719,
                        "nodeType": "ExpressionStatement",
                        "src": "2703:46:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 25696,
              "nodeType": "StructuredDocumentation",
              "src": "2350:123:70",
              "text": " @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."
            },
            "id": 25723,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeToAndCall",
            "nameLocation": "2487:17:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25703,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25698,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2522:17:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25723,
                  "src": "2514:25:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2514:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25700,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2562:4:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25723,
                  "src": "2549:17:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25699,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2549:5:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25702,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "2581:9:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25723,
                  "src": "2576:14:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25701,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2576:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2504:92:70"
            },
            "returnParameters": {
              "id": 25704,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2606:0:70"
            },
            "scope": 25978,
            "src": "2478:288:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25775,
              "nodeType": "Block",
              "src": "3070:842:70",
              "statements": [
                {
                  "condition": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 25735,
                          "name": "_ROLLBACK_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25634,
                          "src": "3422:14:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 25733,
                          "name": "StorageSlotUpgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27639,
                          "src": "3384:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                            "typeString": "type(library StorageSlotUpgradeable)"
                          }
                        },
                        "id": 25734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getBooleanSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27616,
                        "src": "3384:37:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$27588_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.BooleanSlot storage pointer)"
                        }
                      },
                      "id": 25736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3384:53:70",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BooleanSlot_$27588_storage_ptr",
                        "typeString": "struct StorageSlotUpgradeable.BooleanSlot storage pointer"
                      }
                    },
                    "id": 25737,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27587,
                    "src": "3384:59:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 25773,
                    "nodeType": "Block",
                    "src": "3513:393:70",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 25758,
                              "nodeType": "Block",
                              "src": "3618:115:70",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 25754,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 25752,
                                          "name": "slot",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 25749,
                                          "src": "3644:4:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "id": 25753,
                                          "name": "_IMPLEMENTATION_SLOT",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 25638,
                                          "src": "3652:20:70",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "3644:28:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      {
                                        "hexValue": "45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944",
                                        "id": 25755,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3674:43:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c",
                                          "typeString": "literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""
                                        },
                                        "value": "ERC1967Upgrade: unsupported proxiableUUID"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c",
                                          "typeString": "literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""
                                        }
                                      ],
                                      "id": 25751,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "src": "3636:7:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (bool,string memory) pure"
                                      }
                                    },
                                    "id": 25756,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3636:82:70",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 25757,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3636:82:70"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 25759,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 25750,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 25749,
                                  "mutability": "mutable",
                                  "name": "slot",
                                  "nameLocation": "3612:4:70",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 25759,
                                  "src": "3604:12:70",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 25748,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3604:7:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3603:14:70"
                            },
                            "src": "3595:138:70"
                          },
                          {
                            "block": {
                              "id": 25764,
                              "nodeType": "Block",
                              "src": "3740:89:70",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "hexValue": "45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053",
                                        "id": 25761,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3765:48:70",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24",
                                          "typeString": "literal_string \"ERC1967Upgrade: new implementation is not UUPS\""
                                        },
                                        "value": "ERC1967Upgrade: new implementation is not UUPS"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24",
                                          "typeString": "literal_string \"ERC1967Upgrade: new implementation is not UUPS\""
                                        }
                                      ],
                                      "id": 25760,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "3758:6:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 25762,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3758:56:70",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 25763,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3758:56:70"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 25765,
                            "nodeType": "TryCatchClause",
                            "src": "3734:95:70"
                          }
                        ],
                        "externalCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 25744,
                                  "name": "newImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 25726,
                                  "src": "3560:17:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 25743,
                                "name": "IERC1822ProxiableUpgradeable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 25609,
                                "src": "3531:28:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1822ProxiableUpgradeable_$25609_$",
                                  "typeString": "type(contract IERC1822ProxiableUpgradeable)"
                                }
                              },
                              "id": 25745,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3531:47:70",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1822ProxiableUpgradeable_$25609",
                                "typeString": "contract IERC1822ProxiableUpgradeable"
                              }
                            },
                            "id": 25746,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "proxiableUUID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 25608,
                            "src": "3531:61:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                              "typeString": "function () view external returns (bytes32)"
                            }
                          },
                          "id": 25747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3531:63:70",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 25766,
                        "nodeType": "TryStatement",
                        "src": "3527:302:70"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 25768,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25726,
                              "src": "3860:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 25769,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25728,
                              "src": "3879:4:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 25770,
                              "name": "forceCall",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25730,
                              "src": "3885:9:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 25767,
                            "name": "_upgradeToAndCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25723,
                            "src": "3842:17:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                              "typeString": "function (address,bytes memory,bool)"
                            }
                          },
                          "id": 25771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3842:53:70",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 25772,
                        "nodeType": "ExpressionStatement",
                        "src": "3842:53:70"
                      }
                    ]
                  },
                  "id": 25774,
                  "nodeType": "IfStatement",
                  "src": "3380:526:70",
                  "trueBody": {
                    "id": 25742,
                    "nodeType": "Block",
                    "src": "3445:62:70",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 25739,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25726,
                              "src": "3478:17:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 25738,
                            "name": "_setImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25680,
                            "src": "3459:18:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 25740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3459:37:70",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 25741,
                        "nodeType": "ExpressionStatement",
                        "src": "3459:37:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 25724,
              "nodeType": "StructuredDocumentation",
              "src": "2772:161:70",
              "text": " @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."
            },
            "id": 25776,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeToAndCallUUPS",
            "nameLocation": "2947:21:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25726,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2986:17:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25776,
                  "src": "2978:25:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25725,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2978:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25728,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "3026:4:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25776,
                  "src": "3013:17:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25727,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3013:5:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25730,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "3045:9:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25776,
                  "src": "3040:14:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25729,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3040:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2968:92:70"
            },
            "returnParameters": {
              "id": 25732,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3070:0:70"
            },
            "scope": 25978,
            "src": "2938:974:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 25777,
              "nodeType": "StructuredDocumentation",
              "src": "3918:189:70",
              "text": " @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."
            },
            "id": 25780,
            "mutability": "constant",
            "name": "_ADMIN_SLOT",
            "nameLocation": "4138:11:70",
            "nodeType": "VariableDeclaration",
            "scope": 25978,
            "src": "4112:106:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 25778,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "4112:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033",
              "id": 25779,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "4152:66:70",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1",
                "typeString": "int_const 8195...(69 digits omitted)...7091"
              },
              "value": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 25781,
              "nodeType": "StructuredDocumentation",
              "src": "4225:67:70",
              "text": " @dev Emitted when the admin account has changed."
            },
            "id": 25787,
            "name": "AdminChanged",
            "nameLocation": "4303:12:70",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25783,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousAdmin",
                  "nameLocation": "4324:13:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25787,
                  "src": "4316:21:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25782,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4316:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25785,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4347:8:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25787,
                  "src": "4339:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4339:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4315:41:70"
            },
            "src": "4297:60:70"
          },
          {
            "body": {
              "id": 25799,
              "nodeType": "Block",
              "src": "4471:80:70",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 25795,
                          "name": "_ADMIN_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25780,
                          "src": "4526:11:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 25793,
                          "name": "StorageSlotUpgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27639,
                          "src": "4488:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                            "typeString": "type(library StorageSlotUpgradeable)"
                          }
                        },
                        "id": 25794,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27605,
                        "src": "4488:37:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27585_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.AddressSlot storage pointer)"
                        }
                      },
                      "id": 25796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4488:50:70",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$27585_storage_ptr",
                        "typeString": "struct StorageSlotUpgradeable.AddressSlot storage pointer"
                      }
                    },
                    "id": 25797,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27584,
                    "src": "4488:56:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 25792,
                  "id": 25798,
                  "nodeType": "Return",
                  "src": "4481:63:70"
                }
              ]
            },
            "documentation": {
              "id": 25788,
              "nodeType": "StructuredDocumentation",
              "src": "4363:50:70",
              "text": " @dev Returns the current admin."
            },
            "id": 25800,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getAdmin",
            "nameLocation": "4427:9:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25789,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4436:2:70"
            },
            "returnParameters": {
              "id": 25792,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25791,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25800,
                  "src": "4462:7:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25790,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4462:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4461:9:70"
            },
            "scope": 25978,
            "src": "4418:133:70",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25825,
              "nodeType": "Block",
              "src": "4678:167:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 25812,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 25807,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25803,
                          "src": "4696:8:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 25810,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4716:1:70",
                              "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": 25809,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4708:7:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 25808,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4708:7:70",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 25811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4708:10:70",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4696:22:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373",
                        "id": 25813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4720:40:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5",
                          "typeString": "literal_string \"ERC1967: new admin is the zero address\""
                        },
                        "value": "ERC1967: new admin is the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5",
                          "typeString": "literal_string \"ERC1967: new admin is the zero address\""
                        }
                      ],
                      "id": 25806,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4688:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4688:73:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25815,
                  "nodeType": "ExpressionStatement",
                  "src": "4688:73:70"
                },
                {
                  "expression": {
                    "id": 25823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 25819,
                            "name": "_ADMIN_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25780,
                            "src": "4809:11:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 25816,
                            "name": "StorageSlotUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27639,
                            "src": "4771:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                              "typeString": "type(library StorageSlotUpgradeable)"
                            }
                          },
                          "id": 25818,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27605,
                          "src": "4771:37:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27585_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.AddressSlot storage pointer)"
                          }
                        },
                        "id": 25820,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4771:50:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$27585_storage_ptr",
                          "typeString": "struct StorageSlotUpgradeable.AddressSlot storage pointer"
                        }
                      },
                      "id": 25821,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27584,
                      "src": "4771:56:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 25822,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25803,
                      "src": "4830:8:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4771:67:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 25824,
                  "nodeType": "ExpressionStatement",
                  "src": "4771:67:70"
                }
              ]
            },
            "documentation": {
              "id": 25801,
              "nodeType": "StructuredDocumentation",
              "src": "4557:71:70",
              "text": " @dev Stores a new address in the EIP1967 admin slot."
            },
            "id": 25826,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setAdmin",
            "nameLocation": "4642:9:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25803,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4660:8:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25826,
                  "src": "4652:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25802,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4652:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4651:18:70"
            },
            "returnParameters": {
              "id": 25805,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4678:0:70"
            },
            "scope": 25978,
            "src": "4633:212:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 25842,
              "nodeType": "Block",
              "src": "5005:86:70",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 25833,
                          "name": "_getAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25800,
                          "src": "5033:9:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 25834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5033:11:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 25835,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25829,
                        "src": "5046:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25832,
                      "name": "AdminChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25787,
                      "src": "5020:12:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 25836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5020:35:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25837,
                  "nodeType": "EmitStatement",
                  "src": "5015:40:70"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25839,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25829,
                        "src": "5075:8:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25838,
                      "name": "_setAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25826,
                      "src": "5065:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5065:19:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25841,
                  "nodeType": "ExpressionStatement",
                  "src": "5065:19:70"
                }
              ]
            },
            "documentation": {
              "id": 25827,
              "nodeType": "StructuredDocumentation",
              "src": "4851:100:70",
              "text": " @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."
            },
            "id": 25843,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_changeAdmin",
            "nameLocation": "4965:12:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25829,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4986:8:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25843,
                  "src": "4978:16:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4978:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4977:18:70"
            },
            "returnParameters": {
              "id": 25831,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5005:0:70"
            },
            "scope": 25978,
            "src": "4956:135:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 25844,
              "nodeType": "StructuredDocumentation",
              "src": "5097:232:70",
              "text": " @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."
            },
            "id": 25847,
            "mutability": "constant",
            "name": "_BEACON_SLOT",
            "nameLocation": "5360:12:70",
            "nodeType": "VariableDeclaration",
            "scope": 25978,
            "src": "5334:107:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 25845,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "5334:7:70",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530",
              "id": 25846,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "5375:66:70",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1",
                "typeString": "int_const 7415...(69 digits omitted)...4704"
              },
              "value": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 25848,
              "nodeType": "StructuredDocumentation",
              "src": "5448:60:70",
              "text": " @dev Emitted when the beacon is upgraded."
            },
            "id": 25852,
            "name": "BeaconUpgraded",
            "nameLocation": "5519:14:70",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 25851,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25850,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "beacon",
                  "nameLocation": "5550:6:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25852,
                  "src": "5534:22:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25849,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5534:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5533:24:70"
            },
            "src": "5513:45:70"
          },
          {
            "body": {
              "id": 25864,
              "nodeType": "Block",
              "src": "5674:81:70",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 25860,
                          "name": "_BEACON_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25847,
                          "src": "5729:12:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 25858,
                          "name": "StorageSlotUpgradeable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27639,
                          "src": "5691:22:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                            "typeString": "type(library StorageSlotUpgradeable)"
                          }
                        },
                        "id": 25859,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 27605,
                        "src": "5691:37:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27585_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.AddressSlot storage pointer)"
                        }
                      },
                      "id": 25861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5691:51:70",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$27585_storage_ptr",
                        "typeString": "struct StorageSlotUpgradeable.AddressSlot storage pointer"
                      }
                    },
                    "id": 25862,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 27584,
                    "src": "5691:57:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 25857,
                  "id": 25863,
                  "nodeType": "Return",
                  "src": "5684:64:70"
                }
              ]
            },
            "documentation": {
              "id": 25853,
              "nodeType": "StructuredDocumentation",
              "src": "5564:51:70",
              "text": " @dev Returns the current beacon."
            },
            "id": 25865,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getBeacon",
            "nameLocation": "5629:10:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25854,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5639:2:70"
            },
            "returnParameters": {
              "id": 25857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25856,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25865,
                  "src": "5665:7:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5665:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5664:9:70"
            },
            "scope": 25978,
            "src": "5620:135:70",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25900,
              "nodeType": "Block",
              "src": "5884:368:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25874,
                            "name": "newBeacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25868,
                            "src": "5932:9:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 25872,
                            "name": "AddressUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16246,
                            "src": "5902:18:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_AddressUpgradeable_$16246_$",
                              "typeString": "type(library AddressUpgradeable)"
                            }
                          },
                          "id": 25873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16021,
                          "src": "5902:29:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 25875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5902:40:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374",
                        "id": 25876,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5944:39:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470",
                          "typeString": "literal_string \"ERC1967: new beacon is not a contract\""
                        },
                        "value": "ERC1967: new beacon is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470",
                          "typeString": "literal_string \"ERC1967: new beacon is not a contract\""
                        }
                      ],
                      "id": 25871,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5894:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5894:90:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25878,
                  "nodeType": "ExpressionStatement",
                  "src": "5894:90:70"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 25883,
                                    "name": "newBeacon",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 25868,
                                    "src": "6064:9:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 25882,
                                  "name": "IBeaconUpgradeable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 27579,
                                  "src": "6045:18:70",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IBeaconUpgradeable_$27579_$",
                                    "typeString": "type(contract IBeaconUpgradeable)"
                                  }
                                },
                                "id": 25884,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6045:29:70",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBeaconUpgradeable_$27579",
                                  "typeString": "contract IBeaconUpgradeable"
                                }
                              },
                              "id": 25885,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "implementation",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 27578,
                              "src": "6045:44:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 25886,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6045:46:70",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 25880,
                            "name": "AddressUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16246,
                            "src": "6015:18:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_AddressUpgradeable_$16246_$",
                              "typeString": "type(library AddressUpgradeable)"
                            }
                          },
                          "id": 25881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16021,
                          "src": "6015:29:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 25887,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6015:77:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374",
                        "id": 25888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6106:50:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8",
                          "typeString": "literal_string \"ERC1967: beacon implementation is not a contract\""
                        },
                        "value": "ERC1967: beacon implementation is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8",
                          "typeString": "literal_string \"ERC1967: beacon implementation is not a contract\""
                        }
                      ],
                      "id": 25879,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5994:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5994:172:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25890,
                  "nodeType": "ExpressionStatement",
                  "src": "5994:172:70"
                },
                {
                  "expression": {
                    "id": 25898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 25894,
                            "name": "_BEACON_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25847,
                            "src": "6214:12:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 25891,
                            "name": "StorageSlotUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27639,
                            "src": "6176:22:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlotUpgradeable_$27639_$",
                              "typeString": "type(library StorageSlotUpgradeable)"
                            }
                          },
                          "id": 25893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27605,
                          "src": "6176:37:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$27585_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlotUpgradeable.AddressSlot storage pointer)"
                          }
                        },
                        "id": 25895,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6176:51:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$27585_storage_ptr",
                          "typeString": "struct StorageSlotUpgradeable.AddressSlot storage pointer"
                        }
                      },
                      "id": 25896,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 27584,
                      "src": "6176:57:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 25897,
                      "name": "newBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25868,
                      "src": "6236:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "6176:69:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 25899,
                  "nodeType": "ExpressionStatement",
                  "src": "6176:69:70"
                }
              ]
            },
            "documentation": {
              "id": 25866,
              "nodeType": "StructuredDocumentation",
              "src": "5761:71:70",
              "text": " @dev Stores a new beacon in the EIP1967 beacon slot."
            },
            "id": 25901,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBeacon",
            "nameLocation": "5846:10:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25869,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25868,
                  "mutability": "mutable",
                  "name": "newBeacon",
                  "nameLocation": "5865:9:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25901,
                  "src": "5857:17:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25867,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5857:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5856:19:70"
            },
            "returnParameters": {
              "id": 25870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5884:0:70"
            },
            "scope": 25978,
            "src": "5837:415:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 25936,
              "nodeType": "Block",
              "src": "6681:221:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25912,
                        "name": "newBeacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25904,
                        "src": "6702:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25911,
                      "name": "_setBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25901,
                      "src": "6691:10:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25913,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6691:21:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25914,
                  "nodeType": "ExpressionStatement",
                  "src": "6691:21:70"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 25916,
                        "name": "newBeacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25904,
                        "src": "6742:9:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 25915,
                      "name": "BeaconUpgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25852,
                      "src": "6727:14:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 25917,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6727:25:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25918,
                  "nodeType": "EmitStatement",
                  "src": "6722:30:70"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 25924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 25922,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 25919,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 25906,
                          "src": "6766:4:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6766:11:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 25921,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6780:1:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6766:15:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "id": 25923,
                      "name": "forceCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 25908,
                      "src": "6785:9:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6766:28:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 25935,
                  "nodeType": "IfStatement",
                  "src": "6762:134:70",
                  "trueBody": {
                    "id": 25934,
                    "nodeType": "Block",
                    "src": "6796:100:70",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 25927,
                                      "name": "newBeacon",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 25904,
                                      "src": "6851:9:70",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 25926,
                                    "name": "IBeaconUpgradeable",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 27579,
                                    "src": "6832:18:70",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IBeaconUpgradeable_$27579_$",
                                      "typeString": "type(contract IBeaconUpgradeable)"
                                    }
                                  },
                                  "id": 25928,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6832:29:70",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBeaconUpgradeable_$27579",
                                    "typeString": "contract IBeaconUpgradeable"
                                  }
                                },
                                "id": 25929,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "implementation",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 27578,
                                "src": "6832:44:70",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 25930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6832:46:70",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 25931,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 25906,
                              "src": "6880:4:70",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 25925,
                            "name": "_functionDelegateCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25972,
                            "src": "6810:21:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 25932,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6810:75:70",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 25933,
                        "nodeType": "ExpressionStatement",
                        "src": "6810:75:70"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 25902,
              "nodeType": "StructuredDocumentation",
              "src": "6258:292:70",
              "text": " @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."
            },
            "id": 25937,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeBeaconToAndCall",
            "nameLocation": "6564:23:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25904,
                  "mutability": "mutable",
                  "name": "newBeacon",
                  "nameLocation": "6605:9:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25937,
                  "src": "6597:17:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25903,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6597:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25906,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6637:4:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25937,
                  "src": "6624:17:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25905,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6624:5:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25908,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "6656:9:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25937,
                  "src": "6651:14:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 25907,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6651:4:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6587:84:70"
            },
            "returnParameters": {
              "id": 25910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6681:0:70"
            },
            "scope": 25978,
            "src": "6555:347:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 25971,
              "nodeType": "Block",
              "src": "7185:358:70",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 25950,
                            "name": "target",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 25940,
                            "src": "7233:6:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 25948,
                            "name": "AddressUpgradeable",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 16246,
                            "src": "7203:18:70",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_AddressUpgradeable_$16246_$",
                              "typeString": "type(library AddressUpgradeable)"
                            }
                          },
                          "id": 25949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 16021,
                          "src": "7203:29:70",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 25951,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7203:37:70",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
                        "id": 25952,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7242:40:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                          "typeString": "literal_string \"Address: delegate call to non-contract\""
                        },
                        "value": "Address: delegate call to non-contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
                          "typeString": "literal_string \"Address: delegate call to non-contract\""
                        }
                      ],
                      "id": 25947,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7195:7:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 25953,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7195:88:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 25954,
                  "nodeType": "ExpressionStatement",
                  "src": "7195:88:70"
                },
                {
                  "assignments": [
                    25956,
                    25958
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 25956,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "7359:7:70",
                      "nodeType": "VariableDeclaration",
                      "scope": 25971,
                      "src": "7354:12:70",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 25955,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7354:4:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 25958,
                      "mutability": "mutable",
                      "name": "returndata",
                      "nameLocation": "7381:10:70",
                      "nodeType": "VariableDeclaration",
                      "scope": 25971,
                      "src": "7368:23:70",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 25957,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "7368:5:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 25963,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 25961,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25942,
                        "src": "7415:4:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 25959,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25940,
                        "src": "7395:6:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 25960,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "delegatecall",
                      "nodeType": "MemberAccess",
                      "src": "7395:19:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) returns (bool,bytes memory)"
                      }
                    },
                    "id": 25962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7395:25:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7353:67:70"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 25966,
                        "name": "success",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25956,
                        "src": "7473:7:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 25967,
                        "name": "returndata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 25958,
                        "src": "7482:10:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
                        "id": 25968,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7494:41:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                          "typeString": "literal_string \"Address: low-level delegate call failed\""
                        },
                        "value": "Address: low-level delegate call failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
                          "typeString": "literal_string \"Address: low-level delegate call failed\""
                        }
                      ],
                      "expression": {
                        "id": 25964,
                        "name": "AddressUpgradeable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 16246,
                        "src": "7437:18:70",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_AddressUpgradeable_$16246_$",
                          "typeString": "type(library AddressUpgradeable)"
                        }
                      },
                      "id": 25965,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "verifyCallResult",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 16245,
                      "src": "7437:35:70",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 25969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7437:99:70",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 25946,
                  "id": 25970,
                  "nodeType": "Return",
                  "src": "7430:106:70"
                }
              ]
            },
            "documentation": {
              "id": 25938,
              "nodeType": "StructuredDocumentation",
              "src": "6908:175:70",
              "text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
            },
            "id": 25972,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_functionDelegateCall",
            "nameLocation": "7097:21:70",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 25943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25940,
                  "mutability": "mutable",
                  "name": "target",
                  "nameLocation": "7127:6:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25972,
                  "src": "7119:14:70",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 25939,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7119:7:70",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 25942,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "7148:4:70",
                  "nodeType": "VariableDeclaration",
                  "scope": 25972,
                  "src": "7135:17:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25941,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7135:5:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7118:35:70"
            },
            "returnParameters": {
              "id": 25946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 25945,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 25972,
                  "src": "7171:12:70",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 25944,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7171:5:70",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7170:14:70"
            },
            "scope": 25978,
            "src": "7088:455:70",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "constant": false,
            "documentation": {
              "id": 25973,
              "nodeType": "StructuredDocumentation",
              "src": "7549:254:70",
              "text": " @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"
            },
            "id": 25977,
            "mutability": "mutable",
            "name": "__gap",
            "nameLocation": "7828:5:70",
            "nodeType": "VariableDeclaration",
            "scope": 25978,
            "src": "7808:25:70",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$50_storage",
              "typeString": "uint256[50]"
            },
            "typeName": {
              "baseType": {
                "id": 25974,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "7808:7:70",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 25976,
              "length": {
                "hexValue": "3530",
                "id": 25975,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "7816:2:70",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_50_by_1",
                  "typeString": "int_const 50"
                },
                "value": "50"
              },
              "nodeType": "ArrayTypeName",
              "src": "7808:11:70",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr",
                "typeString": "uint256[50]"
              }
            },
            "visibility": "private"
          }
        ],
        "scope": 25979,
        "src": "610:7226:70",
        "usedErrors": []
      }
    ],
    "src": "116:7721:70"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "ERC1967UpgradeUpgradeable",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "AddressUpgradeable",
    "IBeaconUpgradeable",
    "IERC1822ProxiableUpgradeable",
    "Initializable",
    "StorageSlotUpgradeable"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "custom:oz-upgrades-unsafe-allow": "delegatecall",
    "details": "This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._",
    "events": {
      "AdminChanged(address,address)": {
        "details": "Emitted when the admin account has changed."
      },
      "BeaconUpgraded(address)": {
        "details": "Emitted when the beacon is upgraded."
      },
      "Upgraded(address)": {
        "details": "Emitted when the implementation is upgraded."
      }
    },
    "kind": "dev",
    "methods": {},
    "stateVariables": {
      "_ADMIN_SLOT": {
        "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."
      },
      "_BEACON_SLOT": {
        "details": "The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."
      },
      "_IMPLEMENTATION_SLOT": {
        "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."
      },
      "__gap": {
        "details": "This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"
      }
    },
    "version": 1
  },
  "offset": [
    610,
    7836
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "b45cfff2b19f8898b80b8ad56a8d822673f26568",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeaconUpgradeable.sol\";\nimport \"../../interfaces/draft-IERC1822Upgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/StorageSlotUpgradeable.sol\";\nimport \"../utils/Initializable.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967UpgradeUpgradeable is Initializable {\n    function __ERC1967Upgrade_init() internal onlyInitializing {\n    }\n\n    function __ERC1967Upgrade_init_unchained() internal onlyInitializing {\n    }\n    // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _getImplementation() internal view returns (address) {\n        return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(AddressUpgradeable.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n        StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Perform implementation upgrade\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Perform implementation upgrade with additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCall(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _upgradeTo(newImplementation);\n        if (data.length > 0 || forceCall) {\n            _functionDelegateCall(newImplementation, data);\n        }\n    }\n\n    /**\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\n        if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) {\n            _setImplementation(newImplementation);\n        } else {\n            try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n                require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n            } catch {\n                revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n            }\n            _upgradeToAndCall(newImplementation, data, forceCall);\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _getAdmin() internal view returns (address) {\n        return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n        StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     */\n    function _changeAdmin(address newAdmin) internal {\n        emit AdminChanged(_getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n     */\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Emitted when the beacon is upgraded.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function _getBeacon() internal view returns (address) {\n        return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        require(AddressUpgradeable.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n        require(\n            AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()),\n            \"ERC1967: beacon implementation is not a contract\"\n        );\n        StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n    }\n\n    /**\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n     *\n     * Emits a {BeaconUpgraded} event.\n     */\n    function _upgradeBeaconToAndCall(\n        address newBeacon,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n        if (data.length > 0 || forceCall) {\n            _functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data);\n        }\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) {\n        require(AddressUpgradeable.isContract(target), \"Address: delegate call to non-contract\");\n\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return AddressUpgradeable.verifyCallResult(success, returndata, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev This empty reserved space is put in place to allow future versions to add new\n     * variables without shifting down storage in the inheritance chain.\n     * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n     */\n    uint256[50] private __gap;\n}\n",
  "sourceMap": "",
  "sourcePath": "node_modules/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol",
  "type": "contract"
}