[
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "commencedTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "currentTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "scheduleId_",
        "type": "uint256"
      }
    ],
    "name": "calculateUnlocked",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "commencedTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "currentTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "releaseCount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "delayUntilFirstReleaseInSeconds",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "initialReleasePortionInBips",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "periodBetweenReleasesInSeconds",
            "type": "uint256"
          }
        ],
        "internalType": "struct Storage.ReleaseSchedule",
        "name": "releaseSchedule_",
        "type": "tuple"
      }
    ],
    "name": "calculateUnlocked",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "transferRules",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "accessControl",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "snapshotPeriods",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "trustedForwarder",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "identityRegistry",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "restrictedLockupTokenManagementExtension",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "restrictedLockupTokenExtension",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "restrictedLockupTokenStandardsExtension",
            "type": "address"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "uint8",
            "name": "decimals",
            "type": "uint8"
          },
          {
            "internalType": "uint256",
            "name": "maxTotalSupply",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "minTimelockAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxReleaseDelay",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "recordMintTimestamp",
            "type": "bool"
          }
        ],
        "internalType": "struct RestrictedLockupToken.ConstructorParams",
        "name": "params",
        "type": "tuple"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "EasyAccessControl_DoesNotHaveAdminRole",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "EasyAccessControl_DoesNotHaveReserveAdminRole",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "EasyAccessControl_DoesNotHaveTransferAdminRole",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "EasyAccessControl_InvalidZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReentrancyGuardReentrantCall",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_AddressAlreadyHasHolder",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_AlreadySet",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_AmountExceedsUnlockedBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_AmountLessThanReleaseCount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_BalanceCheckFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_CannotExceedMaxTotalSupply",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_CannotRemoveHolderWithActiveTimelocks",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_CannotRemoveLastWallet",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_CantVestAllForMultipleReleases",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_CommencementTimestampDoesNotMatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "expected",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "actual",
        "type": "uint256"
      }
    ],
    "name": "RestrictedLockupToken_ExtensionSlotsPerWordMismatch",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_HolderAddressDoesNotExist",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_HolderAlreadyExists",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_HolderDoesNotExist",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_HoldingIndexOutOfBound",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InitialReleaseOutOfRange",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InsufficientBurnableBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InsufficientTotalBalanceOf",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidAccessControl",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidAddressArray",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidFirstRelease",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidFundAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidFundAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidHolding",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidHoldingIndex",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidIdentityRegistry",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidMinTimelockAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidName",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidNumberOfRelases",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidRInitialReleaseBIPS",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidReclaimTo",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidReleasePeriod",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidReleasePortionForSingleRelease",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidRestrictedLockupTokenExtension",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidRestrictedLockupTokenManagementExtension",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidRestrictedLockupTokenStandardsExtension",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidScheduleId",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidSymbol",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidTimelock",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidTokenType",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidTransferRules",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidTrustedForwarder",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_InvalidZeroAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_MaxCancelersExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_MaxHolderAddressesReached",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_MaxHolderCountReached",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_MaxTimelocksExceeded",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_MaxTotalSupplyTooLarge",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_MismatchedArrayLength",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_NewHolderMaxMustExceedCurrentHolderCount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_NewIdentityRegistryContractDoesNotImplementIIdentityRegistry",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_NewMaxTotalSupplyMustExceedCurrentTotalSupply",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_NewTransferRulesContractDoesNotImplementITransferRules",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_NoHoldingWithEnoughBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_NoItemWithEnoughBalance",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_RecipientAndAmountLengthsShouldMatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "reclaimTokenTo",
        "type": "address"
      }
    ],
    "name": "RestrictedLockupToken_ReclaimToFrozen",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_SafeApprove",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_ScheduleIdDoesNotMatch",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "RestrictedLockupToken_SenderCannotBeRecipient",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_TimelockCannotBeCanceled",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_TimelockHasNoValueRemaining",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_TokenTypeNotAllowedForRecipient",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_TotalAmountDoesNotMatch",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "RestrictedLockupToken_TransfersPaused",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "addr",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "bool",
        "name": "status",
        "type": "bool"
      }
    ],
    "name": "AddressFrozen",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "addr",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "holderId",
        "type": "uint256"
      }
    ],
    "name": "AppendHolderAddress",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "ForceTransferBetween",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "appendedDays",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "highestDays",
        "type": "uint256"
      }
    ],
    "name": "GlobalRegistryBecameUnordered",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "holderId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "HolderCreated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "oldTokenType",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTokenType",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "mintTimestamp",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "HoldingTokenTypeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "bool",
        "name": "status",
        "type": "bool"
      }
    ],
    "name": "Pause",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "holderId",
        "type": "uint256"
      }
    ],
    "name": "RemoveHolder",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "holderId",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "RemoveWalletFromHolder",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "scheduleId",
        "type": "uint256"
      }
    ],
    "name": "ScheduleCreated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "scheduleId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "commencementTimestamp",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timelockId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address[]",
        "name": "cancelableBy",
        "type": "address[]"
      }
    ],
    "name": "ScheduleFunded",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "holderMax",
        "type": "uint256"
      }
    ],
    "name": "SetHolderMax",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "maxTotalSupply",
        "type": "uint256"
      }
    ],
    "name": "SetMaxTotalSupply",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "canceledBy",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "timelockIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "reclaimTokenTo",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "canceledAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "paidAmount",
        "type": "uint256"
      }
    ],
    "name": "TimelockCanceled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "timelockIndex",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "oldTokenType",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTokenType",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "TimelockTokenTypeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "holdingsMerged",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "totalAmount",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newMintTimestamp",
        "type": "uint256"
      }
    ],
    "name": "TokenHoldingsMerged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      }
    ],
    "name": "TokenTypeBurned",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "TokenTypeMinted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      }
    ],
    "name": "TokenTypeTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "admin",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "oldRules",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newRules",
        "type": "address"
      }
    ],
    "name": "Upgrade",
    "type": "event"
  },
  {
    "stateMutability": "nonpayable",
    "type": "fallback"
  },
  {
    "inputs": [],
    "name": "MAX_CANCELABLE_BY",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_WALLETS_PER_HOLDER",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_IIDENTITY_REGISTRY_INTERFACE_ID",
    "outputs": [
      {
        "internalType": "bytes4",
        "name": "",
        "type": "bytes4"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_ITRANSFER_RULES_INTERFACE_ID",
    "outputs": [
      {
        "internalType": "bytes4",
        "name": "",
        "type": "bytes4"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "accessControl",
    "outputs": [
      {
        "internalType": "contract IAccessControl",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timelockIndex_",
        "type": "uint256"
      }
    ],
    "name": "balanceOfTimelock",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "recipients",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      }
    ],
    "name": "batchTransfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "target_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timelockIndex_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "scheduleId_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "commencementTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "totalAmount_",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "reclaimTokenTo_",
        "type": "address"
      }
    ],
    "name": "cancelTimelock",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "circulatingTokenSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_circulatingTokenSupply",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractVersion",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "deploymentDay",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value_",
        "type": "uint256"
      }
    ],
    "name": "detectTransferRestriction",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenType_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "mintTimestamp_",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint256[]",
            "name": "regions",
            "type": "uint256[]"
          },
          {
            "internalType": "uint256",
            "name": "accreditationType",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lastAmlKycChangeTimestamp",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lastAccreditationChangeTimestamp",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "amlKycPassed",
            "type": "bool"
          }
        ],
        "internalType": "struct IIdentityRegistry.IdentityInfo",
        "name": "recipientIdentity",
        "type": "tuple"
      },
      {
        "internalType": "bool",
        "name": "isAmlKycPassed_",
        "type": "bool"
      }
    ],
    "name": "detectTransferRestrictionFor",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      }
    ],
    "name": "determineTokenType",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "elementBitSize",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      }
    ],
    "name": "forceTransferBetween",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "globalIndex",
        "type": "uint256"
      }
    ],
    "name": "getTokenTypeAndMintTimestampFromGlobalIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "mintTimestamp",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "getWalletIndexes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "getWalletIndexesLength",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "globalHoldingCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "globalMintTimestamps",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "holderCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "holderMax",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "identityRegistry",
    "outputs": [
      {
        "internalType": "contract IIdentityRegistry",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      }
    ],
    "name": "isAmlKycPassed",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "isPaused",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "forwarder",
        "type": "address"
      }
    ],
    "name": "isTrustedForwarder",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "lockedBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timelockIndex_",
        "type": "uint256"
      }
    ],
    "name": "lockedBalanceOfTimelock",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_locked",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxBalancePerSubIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxReleaseDelay",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "restrictionCode_",
        "type": "uint256"
      }
    ],
    "name": "messageForTransferRestriction",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "restrictionCode_",
        "type": "uint8"
      }
    ],
    "name": "messageForTransferRestriction",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minTimelockAmount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value_",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "mintTimestampCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      }
    ],
    "name": "mintTokenType",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "recordMintTimestamp",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "recordPausedOnDaysAfterDeployment",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "registryUnordered",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "releaseSchedules",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "releaseCount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "delayUntilFirstReleaseInSeconds",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "initialReleasePortionInBips",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "periodBetweenReleasesInSeconds",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "restrictedLockupTokenExtension",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "restrictedLockupTokenManagementExtension",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "restrictedLockupTokenStandardsExtension",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "scheduleCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "count",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setRecordMintTimestamp",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "slotsPerWord",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "snapshotPeriods",
    "outputs": [
      {
        "internalType": "contract ISnapshotPeriods",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "snapshotPeriodsAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "snapshotsEnabled",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "superBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId_",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "timelockCountOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index_",
        "type": "uint256"
      }
    ],
    "name": "timelockOf",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "funder",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "scheduleId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "commencementTimestamp",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "tokensTransferred",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "totalAmount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "globalHoldingIndex",
            "type": "uint256"
          },
          {
            "internalType": "address[]",
            "name": "cancelableBy",
            "type": "address[]"
          }
        ],
        "internalType": "struct Storage.Timelock",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "totalBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timelockIndex_",
        "type": "uint256"
      }
    ],
    "name": "totalUnlockedToDateOfTimelock",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "globalHoldingIdx",
        "type": "uint256"
      }
    ],
    "name": "transferHolding",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "transferRules",
    "outputs": [
      {
        "internalType": "contract ITransferRules",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "timelockId_",
        "type": "uint256"
      }
    ],
    "name": "transferTimelock",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "trustedForwarder",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "unissuedTokenSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_unissuedTokenSupply",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "unlockedBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timelockIndex_",
        "type": "uint256"
      }
    ],
    "name": "unlockedBalanceOfTimelock",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_unlocked",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "unlockedTotalBalanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "trustedForwarder_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "maxTotalSupply_",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "EasyAccessControl_DoesNotHaveSoftBurnAdminRole",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "to_",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts_",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "commencementTimestamps_",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "scheduleIds_",
        "type": "uint256[]"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy_",
        "type": "address[]"
      }
    ],
    "name": "batchFundReleaseSchedule",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "commencementTimestamp",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "scheduleId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "holdingIdx",
            "type": "uint256"
          }
        ],
        "internalType": "struct RestrictedLockupTokenExtension.FundReleaseScheduleParams[]",
        "name": "params",
        "type": "tuple[]"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy_",
        "type": "address[]"
      }
    ],
    "name": "batchFundReleaseScheduleWithHolding",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "to",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "commencementTimestamps",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "scheduleIds",
        "type": "uint256[]"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy",
        "type": "address[]"
      }
    ],
    "name": "batchMintReleaseSchedule",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "to",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "commencementTimestamps",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "scheduleIds",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "tokenTypes",
        "type": "uint256[]"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy",
        "type": "address[]"
      }
    ],
    "name": "batchMintReleaseScheduleTokenType",
    "outputs": [
      {
        "internalType": "bool",
        "name": "success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value_",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "globalHoldingIdx",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnHolding",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "releaseCount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "delayUntilFirstReleaseInSeconds",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "initialReleasePortionInBips",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "periodBetweenReleasesInSeconds",
        "type": "uint256"
      }
    ],
    "name": "createReleaseSchedule",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "unlockScheduleId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "recipient_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      }
    ],
    "name": "findHoldingFor",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "commencementTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "scheduleId_",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy_",
        "type": "address[]"
      }
    ],
    "name": "fundReleaseSchedule",
    "outputs": [
      {
        "internalType": "bool",
        "name": "_success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "commencementTimestamp",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "scheduleId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "holdingIdx",
            "type": "uint256"
          }
        ],
        "internalType": "struct RestrictedLockupTokenExtension.FundReleaseScheduleParams",
        "name": "params",
        "type": "tuple"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy_",
        "type": "address[]"
      }
    ],
    "name": "fundReleaseScheduleWithHolding",
    "outputs": [
      {
        "internalType": "bool",
        "name": "_success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "commencementTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "scheduleId_",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy_",
        "type": "address[]"
      }
    ],
    "name": "mintReleaseSchedule",
    "outputs": [
      {
        "internalType": "bool",
        "name": "_success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "commencementTimestamp_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "scheduleId_",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "tokenType_",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "cancelableBy_",
        "type": "address[]"
      }
    ],
    "name": "mintReleaseScheduleTokenType",
    "outputs": [
      {
        "internalType": "bool",
        "name": "_success",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value_",
        "type": "uint256"
      }
    ],
    "name": "safeApprove",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "maxTotalSupply_",
        "type": "uint256"
      }
    ],
    "name": "setMaxTotalSupply",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value_",
        "type": "uint256"
      }
    ],
    "name": "softBurn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "oldTokenType",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newTokenType",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "globalIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "updateHoldingTokenType",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "wallet",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timelockIndex",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "newTokenType",
        "type": "uint256"
      }
    ],
    "name": "updateTimelockTokenType",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "EasyAccessControl_DoesNotHaveContractAdminRole",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "EasyAccessControl_DoesNotHaveContractOrTransferAdminRole",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "addresses_",
        "type": "address[]"
      }
    ],
    "name": "addHolderWithAddresses",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_holderId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      }
    ],
    "name": "addressHasHolder",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "holderId_",
        "type": "uint256"
      }
    ],
    "name": "appendHolderAddress",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "addresses_",
        "type": "address[]"
      }
    ],
    "name": "batchRemoveWalletFromHolder",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      }
    ],
    "name": "createHolderFromAddress",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_holderId",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "existingTokenTypes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "existingTokenTypesCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "status_",
        "type": "bool"
      }
    ],
    "name": "freeze",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      }
    ],
    "name": "getFrozenStatus",
    "outputs": [
      {
        "internalType": "bool",
        "name": "status",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "holderId_",
        "type": "uint256"
      }
    ],
    "name": "getHolderAddresses",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      }
    ],
    "name": "getHolderId",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "holderId_",
        "type": "uint256"
      }
    ],
    "name": "holderExists",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      }
    ],
    "name": "holdingCountOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who_",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index_",
        "type": "uint256"
      }
    ],
    "name": "holdingOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "identityRegistryAddr_",
        "type": "address"
      }
    ],
    "name": "isValidIdentityRegistry",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "transferRulesAddr_",
        "type": "address"
      }
    ],
    "name": "isValidTransferRules",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "isPaused_",
        "type": "bool"
      }
    ],
    "name": "pause",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "expectedTransferableAmount",
        "type": "uint256"
      }
    ],
    "name": "previewTransferableFromHoldings",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "transferableAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "holderId_",
        "type": "uint256"
      }
    ],
    "name": "removeHolder",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr_",
        "type": "address"
      }
    ],
    "name": "removeWalletFromHolder",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "holderMax_",
        "type": "uint256"
      }
    ],
    "name": "setHolderMax",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenType",
        "type": "uint256"
      }
    ],
    "name": "tokenTypeExists",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IIdentityRegistry",
        "name": "newIdentityRegistry",
        "type": "address"
      }
    ],
    "name": "upgradeIdentityRegistry",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract ITransferRules",
        "name": "newTransferRules",
        "type": "address"
      }
    ],
    "name": "upgradeTransferRules",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ECDSAInvalidSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "length",
        "type": "uint256"
      }
    ],
    "name": "ECDSAInvalidSignatureLength",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "ECDSAInvalidSignatureS",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "ERC2612ExpiredSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC2612InvalidSigner",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner_",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner_",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
