{
  "_format": "hh-sol-artifact-1",
  "contractName": "KMSVerifier",
  "sourceName": "contracts/KMSVerifier.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "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": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "KMSAlreadySigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "invalidSigner",
          "type": "address"
        }
      ],
      "name": "KMSInvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "numSignatures",
          "type": "uint256"
        }
      ],
      "name": "KMSSignatureThresholdNotReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "KMSSignerNull",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "KMSZeroSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignersSetIsEmpty",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ThresholdIsAboveNumberOfSigners",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ThresholdIsNull",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "newKmsSignersSet",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newThreshold",
          "type": "uint256"
        }
      ],
      "name": "NewContextSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DECRYPTION_RESULT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "EIP712_PUBLIC_DECRYPT_TYPE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "newSignersSet",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "newThreshold",
          "type": "uint256"
        }
      ],
      "name": "defineNewContext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getKmsSigners",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isSigner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "verifyingContractSource",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "chainIDSource",
          "type": "uint64"
        },
        {
          "internalType": "address[]",
          "name": "initialSigners",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "initialThreshold",
          "type": "uint256"
        }
      ],
      "name": "reinitialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "name": "setThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "handlesList",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes",
          "name": "decryptedResult",
          "type": "bytes"
        },
        {
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        }
      ],
      "name": "verifyDecryptionEIP712KMSSignatures",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801562000014575f80fd5b506200001f62000025565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000765760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516124ef620001005f395f8181610d4a01528181610d730152610edd01526124ef5ff3fe60806040526004361061013d575f3560e01c806384b0196e116100bb578063da53c47d11610071578063e75235b811610057578063e75235b814610385578063f2fde38b146103b8578063fc078205146103d7575f80fd5b8063da53c47d14610352578063e30c397814610371575f80fd5b8063960bfe04116100a1578063960bfe04146102cc578063ad3cb1cc146102eb578063b009ec4c14610333575f80fd5b806384b0196e146102795780638da5cb5b146102a0575f80fd5b8063715018a6116101105780637d15c9cf116100f65780637d15c9cf146101de5780637df73e27146101f25780637eaac8f214610258575f80fd5b8063715018a6146101b657806379ba5097146101ca575f80fd5b80630d8e6e2c146101415780632eafb7db1461016b5780634f1ef2861461017f57806352d1902d14610194575b5f80fd5b34801561014c575f80fd5b506101556103f6565b6040516101629190611ca1565b60405180910390f35b348015610176575f80fd5b50610155610471565b61019261018d366004611d7f565b61048d565b005b34801561019f575f80fd5b506101a86104ac565b604051908152602001610162565b3480156101c1575f80fd5b506101926104da565b3480156101d5575f80fd5b506101926104ed565b3480156101e9575f80fd5b506101a861053a565b3480156101fd575f80fd5b5061024861020c366004611dca565b6001600160a01b03165f9081527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900602052604090205460ff1690565b6040519015158152602001610162565b348015610263575f80fd5b5061026c61055d565b6040516101629190611e26565b348015610284575f80fd5b5061028d6105df565b6040516101629796959493929190611e38565b3480156102ab575f80fd5b506102b46106c4565b6040516001600160a01b039091168152602001610162565b3480156102d7575f80fd5b506101926102e6366004611ecf565b6106f8565b3480156102f6575f80fd5b506101556040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561033e575f80fd5b5061024861034d366004611f94565b610789565b34801561035d575f80fd5b5061019261036c366004612069565b6107d3565b34801561037c575f80fd5b506102b4610a64565b348015610390575f80fd5b507f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8902546101a8565b3480156103c3575f80fd5b506101926103d2366004611dca565b610a8c565b3480156103e2575f80fd5b506101926103f1366004612102565b610b11565b60606040518060400160405280600b81526020017f4b4d5356657269666965720000000000000000000000000000000000000000008152506104375f610ca2565b6104416001610ca2565b61044a5f610ca2565b60405160200161045d949392919061219b565b604051602081830303815290604052905090565b60405180608001604052806044815260200161249f6044913981565b610495610d3f565b61049e82610df6565b6104a88282610dfe565b5050565b5f6104b5610ed2565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6104e2610f1b565b6104eb5f610f4d565b565b33806104f7610a64565b6001600160a01b03161461052e5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61053781610f4d565b50565b60405180608001604052806044815260200161249f604491398051906020012081565b60605f7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900600181018054604080516020808402820181019092528281529394508301828280156105d457602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116105b6575b505050505091505090565b5f60608082808083817fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600805490915015801561061d57506001810154155b6106695760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610525565b610671610f85565b61067961104f565b60049290920154604080515f80825260208201909252600f60f81b9c939b5093995067ffffffffffffffff600160a01b83041698506001600160a01b03909116965094509092509050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b610700610f1b565b610709816110a0565b6040517f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900907f1dcd7e1de916ad3be0c1097968029899e2e7d0195cfa6967e16520c0e8d07cea9061077d907f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901908590612218565b60405180910390a15050565b5f6107a7604051806040016040528060608152602001606081525090565b848152602081018490525f6107bb8261112a565b90506107c781856111c6565b925050505b9392505050565b6107db610f1b565b81515f8190036107fe57604051631286e95160e01b815260040160405180910390fd5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89018054604080516020808402820181019092528281527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900935f93919290919083018282801561089457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610876575b505083519394505f925050505b81811015610938575f845f015f8584815181106108c0576108c0612273565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508360010180548061091057610910612287565b5f8281526020902081015f1990810180546001600160a01b03191690550190556001016108a1565b505f5b84811015610a19575f87828151811061095657610956612273565b602002602001015190505f6001600160a01b0316816001600160a01b0316036109925760405163fede5bbd60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526020869052604090205460ff16156109cb57604051632625690b60e21b815260040160405180910390fd5b6001600160a01b03165f818152602086815260408220805460ff1916600190811790915587810180548083018255908452919092200180546001600160a01b0319169092179091550161093b565b50610a23856110a0565b7f1dcd7e1de916ad3be0c1097968029899e2e7d0195cfa6967e16520c0e8d07cea8686604051610a5492919061229b565b60405180910390a1505050505050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006106e8565b610a94610f1b565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255610ad86106c4565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546002919068010000000000000000900460ff1680610b605750805467ffffffffffffffff808416911610155b15610b7e5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff83161768010000000000000000178155610bb5610bb06106c4565b6113a1565b610c0f6040518060400160405280601181526020017f44656372797074696f6e4d616e61676572000000000000000000000000000000815250604051806040016040528060018152602001603160f81b81525089896113b2565b610c4c8585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508792506107d3915050565b805468ff00000000000000001916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b60605f610cae836113cc565b60010190505f8167ffffffffffffffff811115610ccd57610ccd611cce565b6040519080825280601f01601f191660200182016040528015610cf7576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610d0157509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610dd857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dcc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156104eb5760405163703e46dd60e11b815260040160405180910390fd5b610537610f1b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e58575060408051601f3d908101601f19168201909252610e55918101906122bc565b60015b610e8057604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610525565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610ec357604051632a87526960e21b815260048101829052602401610525565b610ecd83836114ad565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104eb5760405163703e46dd60e11b815260040160405180910390fd5b33610f246106c4565b6001600160a01b0316146104eb5760405163118cdaa760e01b8152336004820152602401610525565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556104a882611502565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360280546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360091610fd6906122d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611002906122d3565b80156105d45780601f10611024576101008083540402835291602001916105d4565b820191905f5260205f20905b8154815290600101906020018083116110305750939695505050505050565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360380546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360091610fd6906122d3565b805f036110c057604051630151f13160e71b815260040160405180910390fd5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901547f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890090821115611124576040516335194e6360e01b815260040160405180910390fd5b60020155565b5f6111c060405180608001604052806044815260200161249f60449139805160209182012084516040519192611160920161230b565b604051602081830303815290604052805190602001208460200151805190602001206040516020016111a5939291909283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120611572565b92915050565b80515f908082036111ea57604051632b8241b760e11b815260040160405180910390fd5b5f6112137f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89025490565b90508082101561123957604051632a71fc9360e21b815260048101839052602401610525565b5f8267ffffffffffffffff81111561125357611253611cce565b60405190808252806020026020018201604052801561127c578160200160208202803683370190505b5090505f805b8481101561138a575f6112ae898984815181106112a1576112a1612273565b602002602001015161159e565b90506112f0816001600160a01b03165f9081527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900602052604090205460ff1690565b61131857604051636475522d60e01b81526001600160a01b0382166004820152602401610525565b805c611361578084848151811061133157611331612273565b6001600160a01b03909216602092830291909101909101528261135381612340565b9350506113618160016115b2565b8483106113815761137284846115b9565b600196505050505050506111c0565b50600101611282565b5061139582826115b9565b505f9695505050505050565b6113a96115ee565b6105378161163c565b6113ba6115ee565b6113c68484848461166d565b50505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611414577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611440576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061145e57662386f26fc10000830492506010015b6305f5e1008310611476576305f5e100830492506008015b612710831061148a57612710830492506004015b6064831061149c576064830492506002015b600a83106111c05760010192915050565b6114b682611747565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156114fa57610ecd82826117bd565b6104a861182f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6111c061157e61184e565b8360405161190160f01b8152600281019290925260228201526042902090565b5f806115aa848461185c565b949350505050565b80825d5050565b5f5b81811015610ecd576115e68382815181106115d8576115d8612273565b60200260200101515f6115b2565b6001016115bb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104eb57604051631afcd79f60e31b815260040160405180910390fd5b6116446115ee565b6001600160a01b03811661052e57604051631e4fbdf760e01b81525f6004820152602401610525565b6116756115ee565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360480546001600160a01b0384167fffffffff0000000000000000000000000000000000000000000000000000000090911617600160a01b67ffffffffffffffff8416021790557fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360261172786826123af565b506003810161173685826123af565b505f80825560019091015550505050565b806001600160a01b03163b5f0361177c57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610525565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516117d9919061246f565b5f60405180830381855af49150503d805f8114611811576040519150601f19603f3d011682016040523d82523d5f602084013e611816565b606091505b5091509150611826858383611884565b95945050505050565b34156104eb5760405163b398979f60e01b815260040160405180910390fd5b5f6118576118e0565b905090565b5f805f8061186a8686611992565b92509250925061187a82826119db565b5090949350505050565b6060826118995761189482611a93565b6107cc565b81511580156118b057506001600160a01b0384163b155b156118d957604051639996b31560e01b81526001600160a01b0385166004820152602401610525565b50806107cc565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61192b611abc565b611933611b37565b60048401546040805160208101959095528401929092526060830152600160a01b810467ffffffffffffffff1660808301526001600160a01b031660a082015260c0016040516020818303038152906040528051906020012091505090565b5f805f83516041036119c9576020840151604085015160608601515f1a6119bb88828585611b8c565b9550955095505050506119d4565b505081515f91506002905b9250925092565b5f8260038111156119ee576119ee61248a565b036119f7575050565b6001826003811115611a0b57611a0b61248a565b03611a295760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611a3d57611a3d61248a565b03611a5e5760405163fce698f760e01b815260048101829052602401610525565b6003826003811115611a7257611a7261248a565b036104a8576040516335e2f38360e21b815260048101829052602401610525565b805115611aa35780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360081611ae7610f85565b805190915015611aff57805160209091012092915050565b81548015611b0e579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360081611b6261104f565b805190915015611b7a57805160209091012092915050565b60018201548015611b0e579392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611bc557505f91506003905082611c4a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611c16573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611c4157505f925060019150829050611c4a565b92505f91508190505b9450945094915050565b5f5b83811015611c6e578181015183820152602001611c56565b50505f910152565b5f8151808452611c8d816020860160208601611c54565b601f01601f19169290920160200192915050565b602081525f6107cc6020830184611c76565b80356001600160a01b0381168114611cc9575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d0b57611d0b611cce565b604052919050565b5f82601f830112611d22575f80fd5b813567ffffffffffffffff811115611d3c57611d3c611cce565b611d4f601f8201601f1916602001611ce2565b818152846020838601011115611d63575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215611d90575f80fd5b611d9983611cb3565b9150602083013567ffffffffffffffff811115611db4575f80fd5b611dc085828601611d13565b9150509250929050565b5f60208284031215611dda575f80fd5b6107cc82611cb3565b5f815180845260208085019450602084015f5b83811015611e1b5781516001600160a01b031687529582019590820190600101611df6565b509495945050505050565b602081525f6107cc6020830184611de3565b60ff60f81b881681525f602060e06020840152611e5860e084018a611c76565b8381036040850152611e6a818a611c76565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015611ebd57835183529284019291840191600101611ea1565b50909c9b505050505050505050505050565b5f60208284031215611edf575f80fd5b5035919050565b5f67ffffffffffffffff821115611eff57611eff611cce565b5060051b60200190565b5f82601f830112611f18575f80fd5b81356020611f2d611f2883611ee6565b611ce2565b82815260059290921b84018101918181019086841115611f4b575f80fd5b8286015b84811015611f8957803567ffffffffffffffff811115611f6d575f80fd5b611f7b8986838b0101611d13565b845250918301918301611f4f565b509695505050505050565b5f805f60608486031215611fa6575f80fd5b833567ffffffffffffffff80821115611fbd575f80fd5b818601915086601f830112611fd0575f80fd5b81356020611fe0611f2883611ee6565b82815260059290921b8401810191818101908a841115611ffe575f80fd5b948201945b8386101561201c57853582529482019490820190612003565b97505087013592505080821115612031575f80fd5b61203d87838801611d13565b93506040860135915080821115612052575f80fd5b5061205f86828701611f09565b9150509250925092565b5f806040838503121561207a575f80fd5b823567ffffffffffffffff811115612090575f80fd5b8301601f810185136120a0575f80fd5b803560206120b0611f2883611ee6565b82815260059290921b830181019181810190888411156120ce575f80fd5b938201935b838510156120f3576120e485611cb3565b825293820193908201906120d3565b98969091013596505050505050565b5f805f805f60808688031215612116575f80fd5b61211f86611cb3565b9450602086013567ffffffffffffffff808216821461213c575f80fd5b90945060408701359080821115612151575f80fd5b818801915088601f830112612164575f80fd5b813581811115612172575f80fd5b8960208260051b8501011115612186575f80fd5b96999598505060200195606001359392505050565b5f85516121ac818460208a01611c54565b61103b60f11b90830190815285516121cb816002840160208a01611c54565b808201915050601760f91b80600283015285516121ef816003850160208a01611c54565b6003920191820152835161220a816004840160208801611c54565b016004019695505050505050565b5f6040820160408352808554808352606085019150865f526020925060205f205f5b8281101561225f5781546001600160a01b03168452928401926001918201910161223a565b505050602093909301939093525092915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b604081525f6122ad6040830185611de3565b90508260208301529392505050565b5f602082840312156122cc575f80fd5b5051919050565b600181811c908216806122e757607f821691505b60208210810361230557634e487b7160e01b5f52602260045260245ffd5b50919050565b81515f9082906020808601845b8381101561233457815185529382019390820190600101612318565b50929695505050505050565b5f6001820161235d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b601f821115610ecd57805f5260205f20601f840160051c810160208510156123895750805b601f840160051c820191505b818110156123a8575f8155600101612395565b5050505050565b815167ffffffffffffffff8111156123c9576123c9611cce565b6123dd816123d784546122d3565b84612364565b602080601f831160018114612410575f84156123f95750858301515b5f19600386901b1c1916600185901b178555612467565b5f85815260208120601f198616915b8281101561243e5788860151825594840194600190910190840161241f565b508582101561245b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251612480818460208701611c54565b9190910192915050565b634e487b7160e01b5f52602160045260245ffdfe5075626c696344656372797074566572696669636174696f6e28627974657333325b5d20637448616e646c65732c627974657320646563727970746564526573756c7429a164736f6c6343000818000a",
  "deployedBytecode": "0x60806040526004361061013d575f3560e01c806384b0196e116100bb578063da53c47d11610071578063e75235b811610057578063e75235b814610385578063f2fde38b146103b8578063fc078205146103d7575f80fd5b8063da53c47d14610352578063e30c397814610371575f80fd5b8063960bfe04116100a1578063960bfe04146102cc578063ad3cb1cc146102eb578063b009ec4c14610333575f80fd5b806384b0196e146102795780638da5cb5b146102a0575f80fd5b8063715018a6116101105780637d15c9cf116100f65780637d15c9cf146101de5780637df73e27146101f25780637eaac8f214610258575f80fd5b8063715018a6146101b657806379ba5097146101ca575f80fd5b80630d8e6e2c146101415780632eafb7db1461016b5780634f1ef2861461017f57806352d1902d14610194575b5f80fd5b34801561014c575f80fd5b506101556103f6565b6040516101629190611ca1565b60405180910390f35b348015610176575f80fd5b50610155610471565b61019261018d366004611d7f565b61048d565b005b34801561019f575f80fd5b506101a86104ac565b604051908152602001610162565b3480156101c1575f80fd5b506101926104da565b3480156101d5575f80fd5b506101926104ed565b3480156101e9575f80fd5b506101a861053a565b3480156101fd575f80fd5b5061024861020c366004611dca565b6001600160a01b03165f9081527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900602052604090205460ff1690565b6040519015158152602001610162565b348015610263575f80fd5b5061026c61055d565b6040516101629190611e26565b348015610284575f80fd5b5061028d6105df565b6040516101629796959493929190611e38565b3480156102ab575f80fd5b506102b46106c4565b6040516001600160a01b039091168152602001610162565b3480156102d7575f80fd5b506101926102e6366004611ecf565b6106f8565b3480156102f6575f80fd5b506101556040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561033e575f80fd5b5061024861034d366004611f94565b610789565b34801561035d575f80fd5b5061019261036c366004612069565b6107d3565b34801561037c575f80fd5b506102b4610a64565b348015610390575f80fd5b507f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8902546101a8565b3480156103c3575f80fd5b506101926103d2366004611dca565b610a8c565b3480156103e2575f80fd5b506101926103f1366004612102565b610b11565b60606040518060400160405280600b81526020017f4b4d5356657269666965720000000000000000000000000000000000000000008152506104375f610ca2565b6104416001610ca2565b61044a5f610ca2565b60405160200161045d949392919061219b565b604051602081830303815290604052905090565b60405180608001604052806044815260200161249f6044913981565b610495610d3f565b61049e82610df6565b6104a88282610dfe565b5050565b5f6104b5610ed2565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6104e2610f1b565b6104eb5f610f4d565b565b33806104f7610a64565b6001600160a01b03161461052e5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61053781610f4d565b50565b60405180608001604052806044815260200161249f604491398051906020012081565b60605f7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900600181018054604080516020808402820181019092528281529394508301828280156105d457602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116105b6575b505050505091505090565b5f60608082808083817fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600805490915015801561061d57506001810154155b6106695760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610525565b610671610f85565b61067961104f565b60049290920154604080515f80825260208201909252600f60f81b9c939b5093995067ffffffffffffffff600160a01b83041698506001600160a01b03909116965094509092509050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b610700610f1b565b610709816110a0565b6040517f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900907f1dcd7e1de916ad3be0c1097968029899e2e7d0195cfa6967e16520c0e8d07cea9061077d907f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901908590612218565b60405180910390a15050565b5f6107a7604051806040016040528060608152602001606081525090565b848152602081018490525f6107bb8261112a565b90506107c781856111c6565b925050505b9392505050565b6107db610f1b565b81515f8190036107fe57604051631286e95160e01b815260040160405180910390fd5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89018054604080516020808402820181019092528281527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900935f93919290919083018282801561089457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610876575b505083519394505f925050505b81811015610938575f845f015f8584815181106108c0576108c0612273565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508360010180548061091057610910612287565b5f8281526020902081015f1990810180546001600160a01b03191690550190556001016108a1565b505f5b84811015610a19575f87828151811061095657610956612273565b602002602001015190505f6001600160a01b0316816001600160a01b0316036109925760405163fede5bbd60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526020869052604090205460ff16156109cb57604051632625690b60e21b815260040160405180910390fd5b6001600160a01b03165f818152602086815260408220805460ff1916600190811790915587810180548083018255908452919092200180546001600160a01b0319169092179091550161093b565b50610a23856110a0565b7f1dcd7e1de916ad3be0c1097968029899e2e7d0195cfa6967e16520c0e8d07cea8686604051610a5492919061229b565b60405180910390a1505050505050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c006106e8565b610a94610f1b565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255610ad86106c4565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546002919068010000000000000000900460ff1680610b605750805467ffffffffffffffff808416911610155b15610b7e5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff83161768010000000000000000178155610bb5610bb06106c4565b6113a1565b610c0f6040518060400160405280601181526020017f44656372797074696f6e4d616e61676572000000000000000000000000000000815250604051806040016040528060018152602001603160f81b81525089896113b2565b610c4c8585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508792506107d3915050565b805468ff00000000000000001916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050505050565b60605f610cae836113cc565b60010190505f8167ffffffffffffffff811115610ccd57610ccd611cce565b6040519080825280601f01601f191660200182016040528015610cf7576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610d0157509392505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610dd857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dcc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156104eb5760405163703e46dd60e11b815260040160405180910390fd5b610537610f1b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e58575060408051601f3d908101601f19168201909252610e55918101906122bc565b60015b610e8057604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610525565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114610ec357604051632a87526960e21b815260048101829052602401610525565b610ecd83836114ad565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104eb5760405163703e46dd60e11b815260040160405180910390fd5b33610f246106c4565b6001600160a01b0316146104eb5760405163118cdaa760e01b8152336004820152602401610525565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556104a882611502565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360280546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360091610fd6906122d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611002906122d3565b80156105d45780601f10611024576101008083540402835291602001916105d4565b820191905f5260205f20905b8154815290600101906020018083116110305750939695505050505050565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360380546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360091610fd6906122d3565b805f036110c057604051630151f13160e71b815260040160405180910390fd5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901547f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890090821115611124576040516335194e6360e01b815260040160405180910390fd5b60020155565b5f6111c060405180608001604052806044815260200161249f60449139805160209182012084516040519192611160920161230b565b604051602081830303815290604052805190602001208460200151805190602001206040516020016111a5939291909283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120611572565b92915050565b80515f908082036111ea57604051632b8241b760e11b815260040160405180910390fd5b5f6112137f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89025490565b90508082101561123957604051632a71fc9360e21b815260048101839052602401610525565b5f8267ffffffffffffffff81111561125357611253611cce565b60405190808252806020026020018201604052801561127c578160200160208202803683370190505b5090505f805b8481101561138a575f6112ae898984815181106112a1576112a1612273565b602002602001015161159e565b90506112f0816001600160a01b03165f9081527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900602052604090205460ff1690565b61131857604051636475522d60e01b81526001600160a01b0382166004820152602401610525565b805c611361578084848151811061133157611331612273565b6001600160a01b03909216602092830291909101909101528261135381612340565b9350506113618160016115b2565b8483106113815761137284846115b9565b600196505050505050506111c0565b50600101611282565b5061139582826115b9565b505f9695505050505050565b6113a96115ee565b6105378161163c565b6113ba6115ee565b6113c68484848461166d565b50505050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611414577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611440576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061145e57662386f26fc10000830492506010015b6305f5e1008310611476576305f5e100830492506008015b612710831061148a57612710830492506004015b6064831061149c576064830492506002015b600a83106111c05760010192915050565b6114b682611747565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156114fa57610ecd82826117bd565b6104a861182f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6111c061157e61184e565b8360405161190160f01b8152600281019290925260228201526042902090565b5f806115aa848461185c565b949350505050565b80825d5050565b5f5b81811015610ecd576115e68382815181106115d8576115d8612273565b60200260200101515f6115b2565b6001016115bb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166104eb57604051631afcd79f60e31b815260040160405180910390fd5b6116446115ee565b6001600160a01b03811661052e57604051631e4fbdf760e01b81525f6004820152602401610525565b6116756115ee565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360480546001600160a01b0384167fffffffff0000000000000000000000000000000000000000000000000000000090911617600160a01b67ffffffffffffffff8416021790557fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360261172786826123af565b506003810161173685826123af565b505f80825560019091015550505050565b806001600160a01b03163b5f0361177c57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610525565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516117d9919061246f565b5f60405180830381855af49150503d805f8114611811576040519150601f19603f3d011682016040523d82523d5f602084013e611816565b606091505b5091509150611826858383611884565b95945050505050565b34156104eb5760405163b398979f60e01b815260040160405180910390fd5b5f6118576118e0565b905090565b5f805f8061186a8686611992565b92509250925061187a82826119db565b5090949350505050565b6060826118995761189482611a93565b6107cc565b81511580156118b057506001600160a01b0384163b155b156118d957604051639996b31560e01b81526001600160a01b0385166004820152602401610525565b50806107cc565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61192b611abc565b611933611b37565b60048401546040805160208101959095528401929092526060830152600160a01b810467ffffffffffffffff1660808301526001600160a01b031660a082015260c0016040516020818303038152906040528051906020012091505090565b5f805f83516041036119c9576020840151604085015160608601515f1a6119bb88828585611b8c565b9550955095505050506119d4565b505081515f91506002905b9250925092565b5f8260038111156119ee576119ee61248a565b036119f7575050565b6001826003811115611a0b57611a0b61248a565b03611a295760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611a3d57611a3d61248a565b03611a5e5760405163fce698f760e01b815260048101829052602401610525565b6003826003811115611a7257611a7261248a565b036104a8576040516335e2f38360e21b815260048101829052602401610525565b805115611aa35780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360081611ae7610f85565b805190915015611aff57805160209091012092915050565b81548015611b0e579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360081611b6261104f565b805190915015611b7a57805160209091012092915050565b60018201548015611b0e579392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611bc557505f91506003905082611c4a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611c16573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116611c4157505f925060019150829050611c4a565b92505f91508190505b9450945094915050565b5f5b83811015611c6e578181015183820152602001611c56565b50505f910152565b5f8151808452611c8d816020860160208601611c54565b601f01601f19169290920160200192915050565b602081525f6107cc6020830184611c76565b80356001600160a01b0381168114611cc9575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d0b57611d0b611cce565b604052919050565b5f82601f830112611d22575f80fd5b813567ffffffffffffffff811115611d3c57611d3c611cce565b611d4f601f8201601f1916602001611ce2565b818152846020838601011115611d63575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215611d90575f80fd5b611d9983611cb3565b9150602083013567ffffffffffffffff811115611db4575f80fd5b611dc085828601611d13565b9150509250929050565b5f60208284031215611dda575f80fd5b6107cc82611cb3565b5f815180845260208085019450602084015f5b83811015611e1b5781516001600160a01b031687529582019590820190600101611df6565b509495945050505050565b602081525f6107cc6020830184611de3565b60ff60f81b881681525f602060e06020840152611e5860e084018a611c76565b8381036040850152611e6a818a611c76565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015611ebd57835183529284019291840191600101611ea1565b50909c9b505050505050505050505050565b5f60208284031215611edf575f80fd5b5035919050565b5f67ffffffffffffffff821115611eff57611eff611cce565b5060051b60200190565b5f82601f830112611f18575f80fd5b81356020611f2d611f2883611ee6565b611ce2565b82815260059290921b84018101918181019086841115611f4b575f80fd5b8286015b84811015611f8957803567ffffffffffffffff811115611f6d575f80fd5b611f7b8986838b0101611d13565b845250918301918301611f4f565b509695505050505050565b5f805f60608486031215611fa6575f80fd5b833567ffffffffffffffff80821115611fbd575f80fd5b818601915086601f830112611fd0575f80fd5b81356020611fe0611f2883611ee6565b82815260059290921b8401810191818101908a841115611ffe575f80fd5b948201945b8386101561201c57853582529482019490820190612003565b97505087013592505080821115612031575f80fd5b61203d87838801611d13565b93506040860135915080821115612052575f80fd5b5061205f86828701611f09565b9150509250925092565b5f806040838503121561207a575f80fd5b823567ffffffffffffffff811115612090575f80fd5b8301601f810185136120a0575f80fd5b803560206120b0611f2883611ee6565b82815260059290921b830181019181810190888411156120ce575f80fd5b938201935b838510156120f3576120e485611cb3565b825293820193908201906120d3565b98969091013596505050505050565b5f805f805f60808688031215612116575f80fd5b61211f86611cb3565b9450602086013567ffffffffffffffff808216821461213c575f80fd5b90945060408701359080821115612151575f80fd5b818801915088601f830112612164575f80fd5b813581811115612172575f80fd5b8960208260051b8501011115612186575f80fd5b96999598505060200195606001359392505050565b5f85516121ac818460208a01611c54565b61103b60f11b90830190815285516121cb816002840160208a01611c54565b808201915050601760f91b80600283015285516121ef816003850160208a01611c54565b6003920191820152835161220a816004840160208801611c54565b016004019695505050505050565b5f6040820160408352808554808352606085019150865f526020925060205f205f5b8281101561225f5781546001600160a01b03168452928401926001918201910161223a565b505050602093909301939093525092915050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b604081525f6122ad6040830185611de3565b90508260208301529392505050565b5f602082840312156122cc575f80fd5b5051919050565b600181811c908216806122e757607f821691505b60208210810361230557634e487b7160e01b5f52602260045260245ffd5b50919050565b81515f9082906020808601845b8381101561233457815185529382019390820190600101612318565b50929695505050505050565b5f6001820161235d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b601f821115610ecd57805f5260205f20601f840160051c810160208510156123895750805b601f840160051c820191505b818110156123a8575f8155600101612395565b5050505050565b815167ffffffffffffffff8111156123c9576123c9611cce565b6123dd816123d784546122d3565b84612364565b602080601f831160018114612410575f84156123f95750858301515b5f19600386901b1c1916600185901b178555612467565b5f85815260208120601f198616915b8281101561243e5788860151825594840194600190910190840161241f565b508582101561245b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8251612480818460208701611c54565b9190910192915050565b634e487b7160e01b5f52602160045260245ffdfe5075626c696344656372797074566572696669636174696f6e28627974657333325b5d20637448616e646c65732c627974657320646563727970746564526573756c7429a164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
