{
  "contractName": "StateRegistry",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "GrantedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "RevokedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedFinalizedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedState",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getFinalizedState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForStateAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUintValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRootAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        }
      ],
      "name": "setFinalizedState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        }
      ],
      "name": "setState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506117bf806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063606aa07e11610071578063606aa07e1461013257806367fe5d70146101525780636a899b9b146101325780637d870dd414610165578063cf5aed1214610178578063e8f7ca3e14610198576100a9565b806309648a9d146100ae5780631717e867146100d75780631b126815146100ec57806337462dba1461010c57806339262e871461011f575b600080fd5b6100c16100bc366004611398565b6101ab565b6040516100ce9190611657565b60405180910390f35b6100ea6100e5366004611400565b6101d0565b005b6100ff6100fa366004611400565b61028c565b6040516100ce9190611590565b6100c161011a366004611398565b610303565b6100ea61012d366004611400565b610322565b6101456101403660046113df565b6103c5565b6040516100ce91906115b0565b6100ea61016036600461144d565b6103ea565b6100ea61017336600461144d565b6104af565b61018b6101863660046113df565b610567565b6040516100ce919061173c565b6100ff6101a63660046113b0565b610585565b6101b36112ef565b60008281526020819052604090206101ca906105b9565b92915050565b6101e7836000356001600160e01b0319163361028c565b61020c5760405162461bcd60e51b815260040161020390611608565b60405180910390fd5b6000838152602081815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19166001179055905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659061027f90869061159b565b60405180910390a3505050565b6000838152602081815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff16806102fb5750600084815260208181526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b949350505050565b61030b6112ef565b60008281526020819052604090206101ca906108b1565b610339836000356001600160e01b0319163361028c565b6103555760405162461bcd60e51b815260040161020390611608565b6000838152602081815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa9061027f90869061159b565b60008281526020819052604081206103e3908363ffffffff610bd316565b9392505050565b60008281526020819052604090206001015482906001600160a01b03163314806104265750610426816000356001600160e01b0319163361028c565b6104425760405162461bcd60e51b8152600401610203906115b9565b61046e61045436849003840184611485565b60008581526020819052604090209063ffffffff610be916565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f83602001356040516104a291906115b0565b60405180910390a2505050565b60008281526020819052604090206001015482906001600160a01b03163314806104eb57506104eb816000356001600160e01b0319163361028c565b6105075760405162461bcd60e51b8152600401610203906115b9565b61053361051936849003840184611485565b60008581526020819052604090209063ffffffff610f1716565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec683602001356040516104a291906115b0565b60008281526020819052604081206103e3908363ffffffff61120d16565b600091825260208281526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b6105c16112ef565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c600581111561060457fe5b600581111561060f57fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b6108b96112ef565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156108fe57fe5b600581111561090957fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b6000908152600e91909101602052604090205490565b610c228274465f636f6e7472616374506572666f726d616e636560581b60f884600001516005811115610c1857fe5b60ff16901b6112b9565b610c43826b465f7374617475734461746560a01b836020015160001b6112b9565b610c6b8272465f6e6f6e506572666f726d696e674461746560681b836040015160001b6112b9565b610c8e826d465f6d617475726974794461746560901b836060015160001b6112b9565b610cb1826d465f65786572636973654461746560901b836080015160001b6112b9565b610cd78270465f7465726d696e6174696f6e4461746560781b8360a0015160001b6112b9565b610cff82721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b6112b9565b610d2682701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b6112b9565b610d48826b1197d999595058d8dc9d595960a21b83610120015160001b6112b9565b610d738274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b6112b9565b610da6827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b6112b9565b610dd9827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b6112b9565b610e0c827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b6112b9565b610e32826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b6112b9565b610e5a8271465f65786572636973655175616e7469747960701b836101e0015160001b6112b9565b610e7a8269465f7175616e7469747960b01b83610200015160001b6112b9565b610ea382721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b6112b9565b610ec7826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b6112b9565b610eef8271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b6112b9565b610f13826e465f6c617374436f75706f6e44617960881b8360c0015160001b6112b9565b5050565b610f448272636f6e7472616374506572666f726d616e636560681b60f884600001516005811115610c1857fe5b610f6382697374617475734461746560b01b836020015160001b6112b9565b610f8982706e6f6e506572666f726d696e674461746560781b836040015160001b6112b9565b610faa826b6d617475726974794461746560a01b836060015160001b6112b9565b610fcb826b65786572636973654461746560a01b836080015160001b6112b9565b610fef826e7465726d696e6174696f6e4461746560881b8360a0015160001b6112b9565b61101582701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b6112b9565b61103a826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b6112b9565b61105a82691999595058d8dc9d595960b21b83610120015160001b6112b9565b61108382726e6f6d696e616c496e7465726573745261746560681b83610140015160001b6112b9565b6110b2827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b6112b9565b6110e182783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b6112b9565b611114827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b6112b9565b611138826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b6112b9565b61115e826f65786572636973655175616e7469747960801b836101e0015160001b6112b9565b61117c82677175616e7469747960c01b83610200015160001b6112b9565b6111a3827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b6112b9565b6111c5826b36b0b933b4b72330b1ba37b960a11b83610240015160001b6112b9565b6111eb826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b6112b9565b610f13826c6c617374436f75706f6e44617960981b8360c0015160001b6112b9565b600072636f6e7472616374506572666f726d616e636560681b82141561125e575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c6101ca565b74465f636f6e7472616374506572666f726d616e636560581b8214156112b1575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c6101ca565b5060006101ca565b6000828152600e840160205260409020548114156112d6576112ea565b6000828152600e8401602052604090208190555b505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8035600681106101ca57600080fd5b6000602082840312156113a9578081fd5b5035919050565b600080604083850312156113c2578081fd5b8235915060208301356113d481611771565b809150509250929050565b600080604083850312156113f1578182fd5b50508035926020909101359150565b600080600060608486031215611414578081fd5b8335925060208401356001600160e01b031981168114611432578182fd5b9150604084013561144281611771565b809150509250925092565b6000808284036102a0811215611461578283fd5b83359250610280601f1982011215611477578182fd5b506020830190509250929050565b6000610280808385031215611498578182fd5b6114a18161174a565b6114ab8585611389565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b6006811061158c57fe5b9052565b901515815260200190565b6001600160e01b031991909116815260200190565b90815260200190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60006102808201905061166b828451611582565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561176957600080fd5b604052919050565b6001600160a01b038116811461178657600080fd5b5056fea26469706673582212207fa1734275f043b64f383246faffabece571beb41d913c2816fc1a203ede371e64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063606aa07e11610071578063606aa07e1461013257806367fe5d70146101525780636a899b9b146101325780637d870dd414610165578063cf5aed1214610178578063e8f7ca3e14610198576100a9565b806309648a9d146100ae5780631717e867146100d75780631b126815146100ec57806337462dba1461010c57806339262e871461011f575b600080fd5b6100c16100bc366004611398565b6101ab565b6040516100ce9190611657565b60405180910390f35b6100ea6100e5366004611400565b6101d0565b005b6100ff6100fa366004611400565b61028c565b6040516100ce9190611590565b6100c161011a366004611398565b610303565b6100ea61012d366004611400565b610322565b6101456101403660046113df565b6103c5565b6040516100ce91906115b0565b6100ea61016036600461144d565b6103ea565b6100ea61017336600461144d565b6104af565b61018b6101863660046113df565b610567565b6040516100ce919061173c565b6100ff6101a63660046113b0565b610585565b6101b36112ef565b60008281526020819052604090206101ca906105b9565b92915050565b6101e7836000356001600160e01b0319163361028c565b61020c5760405162461bcd60e51b815260040161020390611608565b60405180910390fd5b6000838152602081815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19166001179055905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659061027f90869061159b565b60405180910390a3505050565b6000838152602081815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff16806102fb5750600084815260208181526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b949350505050565b61030b6112ef565b60008281526020819052604090206101ca906108b1565b610339836000356001600160e01b0319163361028c565b6103555760405162461bcd60e51b815260040161020390611608565b6000838152602081815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa9061027f90869061159b565b60008281526020819052604081206103e3908363ffffffff610bd316565b9392505050565b60008281526020819052604090206001015482906001600160a01b03163314806104265750610426816000356001600160e01b0319163361028c565b6104425760405162461bcd60e51b8152600401610203906115b9565b61046e61045436849003840184611485565b60008581526020819052604090209063ffffffff610be916565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f83602001356040516104a291906115b0565b60405180910390a2505050565b60008281526020819052604090206001015482906001600160a01b03163314806104eb57506104eb816000356001600160e01b0319163361028c565b6105075760405162461bcd60e51b8152600401610203906115b9565b61053361051936849003840184611485565b60008581526020819052604090209063ffffffff610f1716565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec683602001356040516104a291906115b0565b60008281526020819052604081206103e3908363ffffffff61120d16565b600091825260208281526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b6105c16112ef565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c600581111561060457fe5b600581111561060f57fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b6108b96112ef565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156108fe57fe5b600581111561090957fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b6000908152600e91909101602052604090205490565b610c228274465f636f6e7472616374506572666f726d616e636560581b60f884600001516005811115610c1857fe5b60ff16901b6112b9565b610c43826b465f7374617475734461746560a01b836020015160001b6112b9565b610c6b8272465f6e6f6e506572666f726d696e674461746560681b836040015160001b6112b9565b610c8e826d465f6d617475726974794461746560901b836060015160001b6112b9565b610cb1826d465f65786572636973654461746560901b836080015160001b6112b9565b610cd78270465f7465726d696e6174696f6e4461746560781b8360a0015160001b6112b9565b610cff82721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b6112b9565b610d2682701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b6112b9565b610d48826b1197d999595058d8dc9d595960a21b83610120015160001b6112b9565b610d738274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b6112b9565b610da6827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b6112b9565b610dd9827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b6112b9565b610e0c827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b6112b9565b610e32826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b6112b9565b610e5a8271465f65786572636973655175616e7469747960701b836101e0015160001b6112b9565b610e7a8269465f7175616e7469747960b01b83610200015160001b6112b9565b610ea382721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b6112b9565b610ec7826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b6112b9565b610eef8271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b6112b9565b610f13826e465f6c617374436f75706f6e44617960881b8360c0015160001b6112b9565b5050565b610f448272636f6e7472616374506572666f726d616e636560681b60f884600001516005811115610c1857fe5b610f6382697374617475734461746560b01b836020015160001b6112b9565b610f8982706e6f6e506572666f726d696e674461746560781b836040015160001b6112b9565b610faa826b6d617475726974794461746560a01b836060015160001b6112b9565b610fcb826b65786572636973654461746560a01b836080015160001b6112b9565b610fef826e7465726d696e6174696f6e4461746560881b8360a0015160001b6112b9565b61101582701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b6112b9565b61103a826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b6112b9565b61105a82691999595058d8dc9d595960b21b83610120015160001b6112b9565b61108382726e6f6d696e616c496e7465726573745261746560681b83610140015160001b6112b9565b6110b2827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b6112b9565b6110e182783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b6112b9565b611114827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b6112b9565b611138826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b6112b9565b61115e826f65786572636973655175616e7469747960801b836101e0015160001b6112b9565b61117c82677175616e7469747960c01b83610200015160001b6112b9565b6111a3827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b6112b9565b6111c5826b36b0b933b4b72330b1ba37b960a11b83610240015160001b6112b9565b6111eb826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b6112b9565b610f13826c6c617374436f75706f6e44617960981b8360c0015160001b6112b9565b600072636f6e7472616374506572666f726d616e636560681b82141561125e575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c6101ca565b74465f636f6e7472616374506572666f726d616e636560581b8214156112b1575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c6101ca565b5060006101ca565b6000828152600e840160205260409020548114156112d6576112ea565b6000828152600e8401602052604090208190555b505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8035600681106101ca57600080fd5b6000602082840312156113a9578081fd5b5035919050565b600080604083850312156113c2578081fd5b8235915060208301356113d481611771565b809150509250929050565b600080604083850312156113f1578182fd5b50508035926020909101359150565b600080600060608486031215611414578081fd5b8335925060208401356001600160e01b031981168114611432578182fd5b9150604084013561144281611771565b809150509250925092565b6000808284036102a0811215611461578283fd5b83359250610280601f1982011215611477578182fd5b506020830190509250929050565b6000610280808385031215611498578182fd5b6114a18161174a565b6114ab8585611389565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b6006811061158c57fe5b9052565b901515815260200190565b6001600160e01b031991909116815260200190565b90815260200190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60006102808201905061166b828451611582565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561176957600080fd5b604052919050565b6001600160a01b038116811461178657600080fd5b5056fea26469706673582212207fa1734275f043b64f383246faffabece571beb41d913c2816fc1a203ede371e64736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
