{
  "_format": "hh-sol-artifact-1",
  "contractName": "InputVerifier",
  "sourceName": "contracts/InputVerifier.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadySigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AtLeastOneSignerIsRequired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DeserializingInputProofFail",
      "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": "EmptyInputProof",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InitialSignersSetIsEmpty",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidChainId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidHandleVersion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidIndex",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInputHandle",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signerRecovered",
          "type": "address"
        }
      ],
      "name": "InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotASigner",
      "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": [
        {
          "internalType": "uint256",
          "name": "numSignatures",
          "type": "uint256"
        }
      ],
      "name": "SignatureThresholdNotReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignaturesVerificationFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignerNull",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroSignature",
      "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": 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": "signer",
          "type": "address"
        }
      ],
      "name": "SignerAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "signer",
          "type": "address"
        }
      ],
      "name": "SignerRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "HANDLE_VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "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": "signer",
          "type": "address"
        }
      ],
      "name": "addSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cleanTransientStorage",
      "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": "getCoprocessorSigners",
      "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[]"
        }
      ],
      "name": "reinitialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        }
      ],
      "name": "removeSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "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": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "userAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            }
          ],
          "internalType": "struct FHEVMExecutorNoEvents.ContextUserInputs",
          "name": "context",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "inputHandle",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "inputProof",
          "type": "bytes"
        }
      ],
      "name": "verifyCiphertext",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801562000014575f80fd5b506200001f62000025565b620000d9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000765760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612863620001005f395f81816112590152818161128201526113e701526128635ff3fe60806040526004361061013d575f3560e01c806384b0196e116100bb578063e30c397811610071578063e9a7230411610057578063e9a72304146103aa578063eb12d61e146103c9578063f2fde38b146103e8575f80fd5b8063e30c397814610363578063e75235b814610377575f80fd5b80639164d0ae116100a15780639164d0ae146102db578063ad3cb1cc146102fc578063b5ce65c414610344575f80fd5b806384b0196e146102885780638da5cb5b146102af575f80fd5b806352d1902d11610110578063715018a6116100f6578063715018a6146101fa57806379ba50971461020e5780637df73e2714610222575f80fd5b806352d1902d146101b35780636a8c8eb4146101d5575f80fd5b80630d8e6e2c146101415780630e316ab71461016b57806335334c231461018c5780634f1ef286146101a0575b5f80fd5b34801561014c575f80fd5b50610155610407565b604051610162919061217b565b60405180910390f35b348015610176575f80fd5b5061018a6101853660046121a8565b610482565b005b348015610197575f80fd5b5061018a610643565b61018a6101ae36600461225e565b610668565b3480156101be575f80fd5b506101c7610687565b604051908152602001610162565b3480156101e0575f80fd5b506101e85f81565b60405160ff9091168152602001610162565b348015610205575f80fd5b5061018a6106b5565b348015610219575f80fd5b5061018a6106c8565b34801561022d575f80fd5b5061027861023c3660046121a8565b6001600160a01b03165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602052604090205460ff1690565b6040519015158152602001610162565b348015610293575f80fd5b5061029c610712565b60405161016297969594939291906122a9565b3480156102ba575f80fd5b506102c36107f7565b6040516001600160a01b039091168152602001610162565b3480156102e6575f80fd5b506102ef61082b565b6040516101629190612340565b348015610307575f80fd5b506101556040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561034f575f80fd5b5061018a61035e36600461238c565b6108ad565b34801561036e575f80fd5b506102c3610a60565b348015610382575f80fd5b507f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace02546101c7565b3480156103b5575f80fd5b506101c76103c436600461241e565b610a88565b3480156103d4575f80fd5b5061018a6103e33660046121a8565b610f6a565b3480156103f3575f80fd5b5061018a6104023660046121a8565b611078565b60606040518060400160405280600d81526020017f496e7075745665726966696572000000000000000000000000000000000000008152506104485f6110fd565b61045260016110fd565b61045b5f6110fd565b60405160200161046e94939291906124b7565b604051602081830303815290604052905090565b61048a61119a565b6001600160a01b0381165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602081905260409091205460ff166104e45760405163da0357f760e01b815260040160405180910390fd5b6001600160a01b0382165f908152602082905260408120805460ff191690555b600182015481101561063d57826001600160a01b031682600101828154811061052f5761052f612534565b5f918252602090912001546001600160a01b0316036106355760018083018054909161055a9161255c565b8154811061056a5761056a612534565b5f918252602090912001546001830180546001600160a01b03909216918390811061059757610597612534565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806105d5576105d561256f565b5f8281526020902081015f1990810180546001600160a01b03191690550190556105fd6111cc565b6040516001600160a01b038416907f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b905f90a2505050565b600101610504565b50505b50565b5f5c5f805d600190810190805b8281101561063d57805c5f825d5f815d508101610650565b61067061124e565b61067982611305565b610683828261130d565b5050565b5f6106906113dc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6106bd61119a565b6106c65f611425565b565b33806106d2610a60565b6001600160a01b0316146107095760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61064081611425565b5f60608082808083817fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600805490915015801561075057506001810154155b61079c5760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610700565b6107a461145d565b6107ac611527565b60049290920154604080515f80825260208201909252600f60f81b9c939b5093995067ffffffffffffffff600160a01b83041698506001600160a01b03909116965094509092509050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b60605f7f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00600181018054604080516020808402820181019092528281529394508301828280156108a257602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610884575b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546002919068010000000000000000900460ff16806108fc5750805467ffffffffffffffff808416911610155b1561091a5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316176801000000000000000017815561095161094c6107f7565b611578565b6109ab6040518060400160405280600c81526020017f5a4b506f4b4d616e616765720000000000000000000000000000000000000000815250604051806040016040528060018152602001603160f81b8152508888611589565b825f8190036109cd57604051639e9f0c0560e01b815260040160405180910390fd5b5f5b81811015610a0957610a018686838181106109ec576109ec612534565b90506020020160208101906103e391906121a8565b6001016109cf565b5050805468ff00000000000000001916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061081b565b5f805f610a9d84875f015188602001516115a3565b909250905067ffffffffffffffff601086901c16468114610ad157604051633d23e4d160e11b815260040160405180910390fd5b8560ff605082901c1684610e845786515f819003610b02576040516359240e8b60e11b815260040160405180910390fd5b5f885f81518110610b1557610b15612534565b602001015160f81c60f81b60f81c60ff1690505f89600181518110610b3c57610b3c612534565b016020015160f81c90508382111580610b55575060fe84115b15610b73576040516363df817160e01b815260040160405180910390fd5b610b7e816041612583565b610b89836020612583565b610b9490600261259a565b610b9e919061259a565b8314610bbd57604051631817ecd760e01b815260040160405180910390fd5b5f8267ffffffffffffffff811115610bd757610bd76121c1565b604051908082528060200260200182016040528015610c00578160200160208202803683370190505b5090505f5b83811015610c6057602081028c016022015160ff811615610c39576040516317df86d560e21b815260040160405180910390fd5b80838381518110610c4c57610c4c612534565b602090810291909101015250600101610c05565b505f8267ffffffffffffffff811115610c7b57610c7b6121c1565b604051908082528060200260200182016040528015610cae57816020015b6060815260200190600190039081610c995790505b5090505f5b83811015610dbd57604080516041808252608082019092529060208201818036833701905050828281518110610ceb57610ceb612534565b60200260200101819052505f5b6041811015610db4578d81610d0e846041612583565b610d19896020612583565b610d2490600261259a565b610d2e919061259a565b610d38919061259a565b81518110610d4857610d48612534565b602001015160f81c60f81b838381518110610d6557610d65612534565b60200260200101518281518110610d7e57610d7e612534565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101610cf8565b50600101610cb3565b506040805160808101825260608082525f6020830181905292820183905281019190915282815f01819052508e5f015181602001906001600160a01b031690816001600160a01b0316815250508e6020015181604001906001600160a01b031690816001600160a01b031681525050610e3681836115e3565b610e3f8a611616565b828781518110610e5157610e51612534565b60200260200101515f1c8814610e7957604051624b1bf160e31b815260040160405180910390fd5b505050505050610f5c565b5f875f81518110610e9757610e97612534565b016020015160f81c90508181111580610eb0575060fe82115b15610ece576040516363df817160e01b815260040160405180910390fd5b5f805b6020811015610f3957610ee581601f61255c565b610ef0906008612583565b8a82610efd876020612583565b610f0890600261259a565b610f12919061259a565b81518110610f2257610f22612534565b016020015160f81c901b9190911790600101610ed1565b50838114610f5957604051624b1bf160e31b815260040160405180910390fd5b50505b5093505050505b9392505050565b610f7261119a565b6001600160a01b038116610f9957604051633884394160e21b815260040160405180910390fd5b6001600160a01b0381165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602081905260409091205460ff1615610ff457604051633b90338360e11b815260040160405180910390fd5b6001600160a01b0382165f818152602083815260408220805460ff1916600190811790915584810180549182018155835291200180546001600160a01b03191690911790556110416111cc565b6040516001600160a01b038316907f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24905f90a25050565b61108061119a565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556110c46107f7565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60605f61110983611629565b60010190505f8167ffffffffffffffff811115611128576111286121c1565b6040519080825280601f01601f191660200182016040528015611152576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461115c57509392505050565b336111a36107f7565b6001600160a01b0316146106c65760405163118cdaa760e01b8152336004820152602401610700565b7f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace01547f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00908015611235576112216002826125ad565b61122c90600161259a565b60028301555050565b604051632ee4235760e01b815260040160405180910390fd5b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112e757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112db7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106c65760405163703e46dd60e11b815260040160405180910390fd5b61064061119a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611367575060408051601f3d908101601f19168201909252611364918101906125cc565b60015b61138f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610700565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146113d257604051632a87526960e21b815260048101829052602401610700565b61063d838361170b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106c65760405163703e46dd60e11b815260040160405180910390fd5b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561068382611760565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360280546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600916114ae906125e3565b80601f01602080910402602001604051908101604052809291908181526020018280546114da906125e3565b80156108a25780601f106114fc576101008083540402835291602001916108a2565b820191905f5260205f20905b8154815290600101906020018083116115085750939695505050505050565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360380546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600916114ae906125e3565b6115806117d0565b6106408161181e565b6115916117d0565b61159d8484848461184f565b50505050565b5f805f808486886040516020016115bc9392919061261b565b60408051808303601f190181529190528051602090910120805c9890975095505050505050565b5f6115ed83611929565b90506115f981836119ca565b61063d57604051634b506ccd60e01b815260040160405180910390fd5b6001815d60015f5c0181815d805f5d5050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611671577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061169d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106116bb57662386f26fc10000830492506010015b6305f5e10083106116d3576305f5e100830492506008015b61271083106116e757612710830492506004015b606483106116f9576064830492506002015b600a8310611705576001015b92915050565b61171482611ba5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156117585761063d8282611c1b565b610683611c8d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106c657604051631afcd79f60e31b815260040160405180910390fd5b6118266117d0565b6001600160a01b03811661070957604051631e4fbdf760e01b81525f6004820152602401610700565b6118576117d0565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360480546001600160a01b0384167fffffffff0000000000000000000000000000000000000000000000000000000090911617600160a01b67ffffffffffffffff8416021790557fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360261190986826126ab565b506003810161191885826126ab565b505f80825560019091015550505050565b5f6117056040518060a00160405280606f81526020016127e8606f913980516020918201208451604051919261195f920161276b565b60408051601f198184030181528282528051602091820120878201518884015192850195909552918301919091526001600160a01b0392831660608301529190911660808201524660a082015260c00160405160208183030381529060405280519060200120611cac565b80515f908082036119ee57604051635985192160e11b815260040160405180910390fd5b5f611a177f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace025490565b905080821015611a3d57604051632e57ff8360e21b815260048101839052602401610700565b5f8267ffffffffffffffff811115611a5757611a576121c1565b604051908082528060200260200182016040528015611a80578160200160208202803683370190505b5090505f805b84811015611b8e575f611ab289898481518110611aa557611aa5612534565b6020026020010151611cd8565b9050611af4816001600160a01b03165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602052604090205460ff1690565b611b1c5760405163bf18af4360e01b81526001600160a01b0382166004820152602401610700565b805c611b655780848481518110611b3557611b35612534565b6001600160a01b039092166020928302919091019091015282611b57816127a0565b935050611b65816001611cec565b848310611b8557611b768484611cf3565b60019650505050505050611705565b50600101611a86565b50611b998282611cf3565b505f9695505050505050565b806001600160a01b03163b5f03611bda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610700565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051611c3791906127b8565b5f60405180830381855af49150503d805f8114611c6f576040519150601f19603f3d011682016040523d82523d5f602084013e611c74565b606091505b5091509150611c84858383611d28565b95945050505050565b34156106c65760405163b398979f60e01b815260040160405180910390fd5b5f611705611cb8611d84565b8360405161190160f01b8152600281019290925260228201526042902090565b5f80611ce48484611d92565b949350505050565b80825d5050565b5f5b8181101561063d57611d20838281518110611d1257611d12612534565b60200260200101515f611cec565b600101611cf5565b606082611d3d57611d3882611dba565b610f63565b8151158015611d5457506001600160a01b0384163b155b15611d7d57604051639996b31560e01b81526001600160a01b0385166004820152602401610700565b5080610f63565b5f611d8d611de3565b905090565b5f805f80611da08686611e95565b925092509250611db08282611ede565b5090949350505050565b805115611dca5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611e2e611f96565b611e36612011565b60048401546040805160208101959095528401929092526060830152600160a01b810467ffffffffffffffff1660808301526001600160a01b031660a082015260c0016040516020818303038152906040528051906020012091505090565b5f805f8351604103611ecc576020840151604085015160608601515f1a611ebe88828585612066565b955095509550505050611ed7565b505081515f91506002905b9250925092565b5f826003811115611ef157611ef16127d3565b03611efa575050565b6001826003811115611f0e57611f0e6127d3565b03611f2c5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611f4057611f406127d3565b03611f615760405163fce698f760e01b815260048101829052602401610700565b6003826003811115611f7557611f756127d3565b03610683576040516335e2f38360e21b815260048101829052602401610700565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360081611fc161145d565b805190915015611fd957805160209091012092915050565b81548015611fe8579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736008161203c611527565b80519091501561205457805160209091012092915050565b60018201548015611fe8579392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561209f57505f91506003905082612124565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156120f0573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661211b57505f925060019150829050612124565b92505f91508190505b9450945094915050565b5f5b83811015612148578181015183820152602001612130565b50505f910152565b5f815180845261216781602086016020860161212e565b601f01601f19169290920160200192915050565b602081525f610f636020830184612150565b80356001600160a01b03811681146121a3575f80fd5b919050565b5f602082840312156121b8575f80fd5b610f638261218d565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126121e4575f80fd5b813567ffffffffffffffff808211156121ff576121ff6121c1565b604051601f8301601f19908116603f01168101908282118183101715612227576122276121c1565b8160405283815286602085880101111561223f575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f806040838503121561226f575f80fd5b6122788361218d565b9150602083013567ffffffffffffffff811115612293575f80fd5b61229f858286016121d5565b9150509250929050565b60ff60f81b881681525f602060e060208401526122c960e084018a612150565b83810360408501526122db818a612150565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561232e57835183529284019291840191600101612312565b50909c9b505050505050505050505050565b602080825282518282018190525f9190848201906040850190845b818110156123805783516001600160a01b03168352928401929184019160010161235b565b50909695505050505050565b5f805f806060858703121561239f575f80fd5b6123a88561218d565b9350602085013567ffffffffffffffff80821682146123c5575f80fd5b909350604086013590808211156123da575f80fd5b818701915087601f8301126123ed575f80fd5b8135818111156123fb575f80fd5b8860208260051b850101111561240f575f80fd5b95989497505060200194505050565b5f805f8385036080811215612431575f80fd5b604081121561243e575f80fd5b506040516040810167ffffffffffffffff8282108183111715612463576124636121c1565b816040526124708761218d565b835261247e6020880161218d565b6020840152919450604086013593506060860135918083111561249f575f80fd5b50506124ad868287016121d5565b9150509250925092565b5f85516124c8818460208a0161212e565b61103b60f11b90830190815285516124e7816002840160208a0161212e565b808201915050601760f91b806002830152855161250b816003850160208a0161212e565b6003920191820152835161252681600484016020880161212e565b016004019695505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8181038181111561170557611705612548565b634e487b7160e01b5f52603160045260245ffd5b808202811582820484141761170557611705612548565b8082018082111561170557611705612548565b5f826125c757634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156125dc575f80fd5b5051919050565b600181811c908216806125f757607f821691505b60208210810361261557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825161265181602885016020870161212e565b91909101602801949350505050565b601f82111561063d57805f5260205f20601f840160051c810160208510156126855750805b601f840160051c820191505b818110156126a4575f8155600101612691565b5050505050565b815167ffffffffffffffff8111156126c5576126c56121c1565b6126d9816126d384546125e3565b84612660565b602080601f83116001811461270c575f84156126f55750858301515b5f19600386901b1c1916600185901b178555612763565b5f85815260208120601f198616915b8281101561273a5788860151825594840194600190910190840161271b565b508582101561275757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b81515f9082906020808601845b8381101561279457815185529382019390820190600101612778565b50929695505050505050565b5f600182016127b1576127b1612548565b5060010190565b5f82516127c981846020870161212e565b9190910192915050565b634e487b7160e01b5f52602160045260245ffdfe43697068657274657874566572696669636174696f6e28627974657333325b5d20637448616e646c65732c616464726573732075736572416464726573732c6164647265737320636f6e7472616374416464726573732c75696e7432353620636f6e7472616374436861696e496429a164736f6c6343000818000a",
  "deployedBytecode": "0x60806040526004361061013d575f3560e01c806384b0196e116100bb578063e30c397811610071578063e9a7230411610057578063e9a72304146103aa578063eb12d61e146103c9578063f2fde38b146103e8575f80fd5b8063e30c397814610363578063e75235b814610377575f80fd5b80639164d0ae116100a15780639164d0ae146102db578063ad3cb1cc146102fc578063b5ce65c414610344575f80fd5b806384b0196e146102885780638da5cb5b146102af575f80fd5b806352d1902d11610110578063715018a6116100f6578063715018a6146101fa57806379ba50971461020e5780637df73e2714610222575f80fd5b806352d1902d146101b35780636a8c8eb4146101d5575f80fd5b80630d8e6e2c146101415780630e316ab71461016b57806335334c231461018c5780634f1ef286146101a0575b5f80fd5b34801561014c575f80fd5b50610155610407565b604051610162919061217b565b60405180910390f35b348015610176575f80fd5b5061018a6101853660046121a8565b610482565b005b348015610197575f80fd5b5061018a610643565b61018a6101ae36600461225e565b610668565b3480156101be575f80fd5b506101c7610687565b604051908152602001610162565b3480156101e0575f80fd5b506101e85f81565b60405160ff9091168152602001610162565b348015610205575f80fd5b5061018a6106b5565b348015610219575f80fd5b5061018a6106c8565b34801561022d575f80fd5b5061027861023c3660046121a8565b6001600160a01b03165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602052604090205460ff1690565b6040519015158152602001610162565b348015610293575f80fd5b5061029c610712565b60405161016297969594939291906122a9565b3480156102ba575f80fd5b506102c36107f7565b6040516001600160a01b039091168152602001610162565b3480156102e6575f80fd5b506102ef61082b565b6040516101629190612340565b348015610307575f80fd5b506101556040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561034f575f80fd5b5061018a61035e36600461238c565b6108ad565b34801561036e575f80fd5b506102c3610a60565b348015610382575f80fd5b507f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace02546101c7565b3480156103b5575f80fd5b506101c76103c436600461241e565b610a88565b3480156103d4575f80fd5b5061018a6103e33660046121a8565b610f6a565b3480156103f3575f80fd5b5061018a6104023660046121a8565b611078565b60606040518060400160405280600d81526020017f496e7075745665726966696572000000000000000000000000000000000000008152506104485f6110fd565b61045260016110fd565b61045b5f6110fd565b60405160200161046e94939291906124b7565b604051602081830303815290604052905090565b61048a61119a565b6001600160a01b0381165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602081905260409091205460ff166104e45760405163da0357f760e01b815260040160405180910390fd5b6001600160a01b0382165f908152602082905260408120805460ff191690555b600182015481101561063d57826001600160a01b031682600101828154811061052f5761052f612534565b5f918252602090912001546001600160a01b0316036106355760018083018054909161055a9161255c565b8154811061056a5761056a612534565b5f918252602090912001546001830180546001600160a01b03909216918390811061059757610597612534565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806105d5576105d561256f565b5f8281526020902081015f1990810180546001600160a01b03191690550190556105fd6111cc565b6040516001600160a01b038416907f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b905f90a2505050565b600101610504565b50505b50565b5f5c5f805d600190810190805b8281101561063d57805c5f825d5f815d508101610650565b61067061124e565b61067982611305565b610683828261130d565b5050565b5f6106906113dc565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6106bd61119a565b6106c65f611425565b565b33806106d2610a60565b6001600160a01b0316146107095760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b61064081611425565b5f60608082808083817fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600805490915015801561075057506001810154155b61079c5760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610700565b6107a461145d565b6107ac611527565b60049290920154604080515f80825260208201909252600f60f81b9c939b5093995067ffffffffffffffff600160a01b83041698506001600160a01b03909116965094509092509050565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b60605f7f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00600181018054604080516020808402820181019092528281529394508301828280156108a257602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610884575b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546002919068010000000000000000900460ff16806108fc5750805467ffffffffffffffff808416911610155b1561091a5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff8316176801000000000000000017815561095161094c6107f7565b611578565b6109ab6040518060400160405280600c81526020017f5a4b506f4b4d616e616765720000000000000000000000000000000000000000815250604051806040016040528060018152602001603160f81b8152508888611589565b825f8190036109cd57604051639e9f0c0560e01b815260040160405180910390fd5b5f5b81811015610a0957610a018686838181106109ec576109ec612534565b90506020020160208101906103e391906121a8565b6001016109cf565b5050805468ff00000000000000001916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061081b565b5f805f610a9d84875f015188602001516115a3565b909250905067ffffffffffffffff601086901c16468114610ad157604051633d23e4d160e11b815260040160405180910390fd5b8560ff605082901c1684610e845786515f819003610b02576040516359240e8b60e11b815260040160405180910390fd5b5f885f81518110610b1557610b15612534565b602001015160f81c60f81b60f81c60ff1690505f89600181518110610b3c57610b3c612534565b016020015160f81c90508382111580610b55575060fe84115b15610b73576040516363df817160e01b815260040160405180910390fd5b610b7e816041612583565b610b89836020612583565b610b9490600261259a565b610b9e919061259a565b8314610bbd57604051631817ecd760e01b815260040160405180910390fd5b5f8267ffffffffffffffff811115610bd757610bd76121c1565b604051908082528060200260200182016040528015610c00578160200160208202803683370190505b5090505f5b83811015610c6057602081028c016022015160ff811615610c39576040516317df86d560e21b815260040160405180910390fd5b80838381518110610c4c57610c4c612534565b602090810291909101015250600101610c05565b505f8267ffffffffffffffff811115610c7b57610c7b6121c1565b604051908082528060200260200182016040528015610cae57816020015b6060815260200190600190039081610c995790505b5090505f5b83811015610dbd57604080516041808252608082019092529060208201818036833701905050828281518110610ceb57610ceb612534565b60200260200101819052505f5b6041811015610db4578d81610d0e846041612583565b610d19896020612583565b610d2490600261259a565b610d2e919061259a565b610d38919061259a565b81518110610d4857610d48612534565b602001015160f81c60f81b838381518110610d6557610d65612534565b60200260200101518281518110610d7e57610d7e612534565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101610cf8565b50600101610cb3565b506040805160808101825260608082525f6020830181905292820183905281019190915282815f01819052508e5f015181602001906001600160a01b031690816001600160a01b0316815250508e6020015181604001906001600160a01b031690816001600160a01b031681525050610e3681836115e3565b610e3f8a611616565b828781518110610e5157610e51612534565b60200260200101515f1c8814610e7957604051624b1bf160e31b815260040160405180910390fd5b505050505050610f5c565b5f875f81518110610e9757610e97612534565b016020015160f81c90508181111580610eb0575060fe82115b15610ece576040516363df817160e01b815260040160405180910390fd5b5f805b6020811015610f3957610ee581601f61255c565b610ef0906008612583565b8a82610efd876020612583565b610f0890600261259a565b610f12919061259a565b81518110610f2257610f22612534565b016020015160f81c901b9190911790600101610ed1565b50838114610f5957604051624b1bf160e31b815260040160405180910390fd5b50505b5093505050505b9392505050565b610f7261119a565b6001600160a01b038116610f9957604051633884394160e21b815260040160405180910390fd5b6001600160a01b0381165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602081905260409091205460ff1615610ff457604051633b90338360e11b815260040160405180910390fd5b6001600160a01b0382165f818152602083815260408220805460ff1916600190811790915584810180549182018155835291200180546001600160a01b03191690911790556110416111cc565b6040516001600160a01b038316907f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24905f90a25050565b61108061119a565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556110c46107f7565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b60605f61110983611629565b60010190505f8167ffffffffffffffff811115611128576111286121c1565b6040519080825280601f01601f191660200182016040528015611152576020820181803683370190505b5090508181016020015b5f19017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461115c57509392505050565b336111a36107f7565b6001600160a01b0316146106c65760405163118cdaa760e01b8152336004820152602401610700565b7f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace01547f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00908015611235576112216002826125ad565b61122c90600161259a565b60028301555050565b604051632ee4235760e01b815260040160405180910390fd5b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112e757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112db7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156106c65760405163703e46dd60e11b815260040160405180910390fd5b61064061119a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611367575060408051601f3d908101601f19168201909252611364918101906125cc565b60015b61138f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610700565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146113d257604051632a87526960e21b815260048101829052602401610700565b61063d838361170b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106c65760405163703e46dd60e11b815260040160405180910390fd5b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561068382611760565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360280546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600916114ae906125e3565b80601f01602080910402602001604051908101604052809291908181526020018280546114da906125e3565b80156108a25780601f106114fc576101008083540402835291602001916108a2565b820191905f5260205f20905b8154815290600101906020018083116115085750939695505050505050565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360380546060917fe910845fd818f61127c84f3586776436a37dead33625056c65162537e3373600916114ae906125e3565b6115806117d0565b6106408161181e565b6115916117d0565b61159d8484848461184f565b50505050565b5f805f808486886040516020016115bc9392919061261b565b60408051808303601f190181529190528051602090910120805c9890975095505050505050565b5f6115ed83611929565b90506115f981836119ca565b61063d57604051634b506ccd60e01b815260040160405180910390fd5b6001815d60015f5c0181815d805f5d5050565b5f807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611671577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061169d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106116bb57662386f26fc10000830492506010015b6305f5e10083106116d3576305f5e100830492506008015b61271083106116e757612710830492506004015b606483106116f9576064830492506002015b600a8310611705576001015b92915050565b61171482611ba5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156117585761063d8282611c1b565b610683611c8d565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166106c657604051631afcd79f60e31b815260040160405180910390fd5b6118266117d0565b6001600160a01b03811661070957604051631e4fbdf760e01b81525f6004820152602401610700565b6118576117d0565b7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360480546001600160a01b0384167fffffffff0000000000000000000000000000000000000000000000000000000090911617600160a01b67ffffffffffffffff8416021790557fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360261190986826126ab565b506003810161191885826126ab565b505f80825560019091015550505050565b5f6117056040518060a00160405280606f81526020016127e8606f913980516020918201208451604051919261195f920161276b565b60408051601f198184030181528282528051602091820120878201518884015192850195909552918301919091526001600160a01b0392831660608301529190911660808201524660a082015260c00160405160208183030381529060405280519060200120611cac565b80515f908082036119ee57604051635985192160e11b815260040160405180910390fd5b5f611a177f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace025490565b905080821015611a3d57604051632e57ff8360e21b815260048101839052602401610700565b5f8267ffffffffffffffff811115611a5757611a576121c1565b604051908082528060200260200182016040528015611a80578160200160208202803683370190505b5090505f805b84811015611b8e575f611ab289898481518110611aa557611aa5612534565b6020026020010151611cd8565b9050611af4816001600160a01b03165f9081527f3f7d7a96c8c7024e92d37afccfc9b87773a33b9bc22e23134b683e74a50ace00602052604090205460ff1690565b611b1c5760405163bf18af4360e01b81526001600160a01b0382166004820152602401610700565b805c611b655780848481518110611b3557611b35612534565b6001600160a01b039092166020928302919091019091015282611b57816127a0565b935050611b65816001611cec565b848310611b8557611b768484611cf3565b60019650505050505050611705565b50600101611a86565b50611b998282611cf3565b505f9695505050505050565b806001600160a01b03163b5f03611bda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610700565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051611c3791906127b8565b5f60405180830381855af49150503d805f8114611c6f576040519150601f19603f3d011682016040523d82523d5f602084013e611c74565b606091505b5091509150611c84858383611d28565b95945050505050565b34156106c65760405163b398979f60e01b815260040160405180910390fd5b5f611705611cb8611d84565b8360405161190160f01b8152600281019290925260228201526042902090565b5f80611ce48484611d92565b949350505050565b80825d5050565b5f5b8181101561063d57611d20838281518110611d1257611d12612534565b60200260200101515f611cec565b600101611cf5565b606082611d3d57611d3882611dba565b610f63565b8151158015611d5457506001600160a01b0384163b155b15611d7d57604051639996b31560e01b81526001600160a01b0385166004820152602401610700565b5080610f63565b5f611d8d611de3565b905090565b5f805f80611da08686611e95565b925092509250611db08282611ede565b5090949350505050565b805115611dca5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611e2e611f96565b611e36612011565b60048401546040805160208101959095528401929092526060830152600160a01b810467ffffffffffffffff1660808301526001600160a01b031660a082015260c0016040516020818303038152906040528051906020012091505090565b5f805f8351604103611ecc576020840151604085015160608601515f1a611ebe88828585612066565b955095509550505050611ed7565b505081515f91506002905b9250925092565b5f826003811115611ef157611ef16127d3565b03611efa575050565b6001826003811115611f0e57611f0e6127d3565b03611f2c5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611f4057611f406127d3565b03611f615760405163fce698f760e01b815260048101829052602401610700565b6003826003811115611f7557611f756127d3565b03610683576040516335e2f38360e21b815260048101829052602401610700565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e337360081611fc161145d565b805190915015611fd957805160209091012092915050565b81548015611fe8579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fe910845fd818f61127c84f3586776436a37dead33625056c65162537e33736008161203c611527565b80519091501561205457805160209091012092915050565b60018201548015611fe8579392505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561209f57505f91506003905082612124565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156120f0573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661211b57505f925060019150829050612124565b92505f91508190505b9450945094915050565b5f5b83811015612148578181015183820152602001612130565b50505f910152565b5f815180845261216781602086016020860161212e565b601f01601f19169290920160200192915050565b602081525f610f636020830184612150565b80356001600160a01b03811681146121a3575f80fd5b919050565b5f602082840312156121b8575f80fd5b610f638261218d565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126121e4575f80fd5b813567ffffffffffffffff808211156121ff576121ff6121c1565b604051601f8301601f19908116603f01168101908282118183101715612227576122276121c1565b8160405283815286602085880101111561223f575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f806040838503121561226f575f80fd5b6122788361218d565b9150602083013567ffffffffffffffff811115612293575f80fd5b61229f858286016121d5565b9150509250929050565b60ff60f81b881681525f602060e060208401526122c960e084018a612150565b83810360408501526122db818a612150565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561232e57835183529284019291840191600101612312565b50909c9b505050505050505050505050565b602080825282518282018190525f9190848201906040850190845b818110156123805783516001600160a01b03168352928401929184019160010161235b565b50909695505050505050565b5f805f806060858703121561239f575f80fd5b6123a88561218d565b9350602085013567ffffffffffffffff80821682146123c5575f80fd5b909350604086013590808211156123da575f80fd5b818701915087601f8301126123ed575f80fd5b8135818111156123fb575f80fd5b8860208260051b850101111561240f575f80fd5b95989497505060200194505050565b5f805f8385036080811215612431575f80fd5b604081121561243e575f80fd5b506040516040810167ffffffffffffffff8282108183111715612463576124636121c1565b816040526124708761218d565b835261247e6020880161218d565b6020840152919450604086013593506060860135918083111561249f575f80fd5b50506124ad868287016121d5565b9150509250925092565b5f85516124c8818460208a0161212e565b61103b60f11b90830190815285516124e7816002840160208a0161212e565b808201915050601760f91b806002830152855161250b816003850160208a0161212e565b6003920191820152835161252681600484016020880161212e565b016004019695505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8181038181111561170557611705612548565b634e487b7160e01b5f52603160045260245ffd5b808202811582820484141761170557611705612548565b8082018082111561170557611705612548565b5f826125c757634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156125dc575f80fd5b5051919050565b600181811c908216806125f757607f821691505b60208210810361261557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825161265181602885016020870161212e565b91909101602801949350505050565b601f82111561063d57805f5260205f20601f840160051c810160208510156126855750805b601f840160051c820191505b818110156126a4575f8155600101612691565b5050505050565b815167ffffffffffffffff8111156126c5576126c56121c1565b6126d9816126d384546125e3565b84612660565b602080601f83116001811461270c575f84156126f55750858301515b5f19600386901b1c1916600185901b178555612763565b5f85815260208120601f198616915b8281101561273a5788860151825594840194600190910190840161271b565b508582101561275757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b81515f9082906020808601845b8381101561279457815185529382019390820190600101612778565b50929695505050505050565b5f600182016127b1576127b1612548565b5060010190565b5f82516127c981846020870161212e565b9190910192915050565b634e487b7160e01b5f52602160045260245ffdfe43697068657274657874566572696669636174696f6e28627974657333325b5d20637448616e646c65732c616464726573732075736572416464726573732c6164647265737320636f6e7472616374416464726573732c75696e7432353620636f6e7472616374436861696e496429a164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
