{
  "_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": "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": "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": 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": "CIPHERTEXTVERIFICATION_KMS_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": "signer",
          "type": "address"
        }
      ],
      "name": "addSigner",
      "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": "getSigners",
      "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": [],
      "name": "get_CIPHERTEXTVERIFICATION_KMS_TYPE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "get_DECRYPTIONRESULT_TYPE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isSigner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "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": "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": [
        {
          "internalType": "address",
          "name": "aclAddress",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "handlesList",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "decryptedResult",
          "type": "bytes"
        },
        {
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        }
      ],
      "name": "verifyDecryptionEIP712KMSSignatures",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "aclAddress",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "hashOfCiphertext",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "userAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            }
          ],
          "internalType": "struct KMSVerifier.CiphertextVerificationForKMS",
          "name": "cv",
          "type": "tuple"
        },
        {
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        }
      ],
      "name": "verifyInputEIP712KMSSignatures",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b60405161226c90816100d18239608051818181610ee50152610f800152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f8080610059565b63f92ee8a960e01b8152600490fd5b5f80fdfe60406080815260049081361015610014575f80fd5b5f3560e01c9182630d8e6e2c1461128c5782630e316ab7146112635782630e66e3f2146111815782631994b168146103bd5782634f1ef28614610f4157826352d1902d14610eca578263715018a614610e2a57826379ba509714610dc85782637df73e2714610d6d57826384b0196e14610c0d5782638da5cb5b14610bc757826392bacce414610baa57826394cf795e14610ac9578263ad3cb1cc14610a6d578263c4d66de8146105cf578263dd66628714610437578263e30c3978146103f1578263e6c51123146103bd578263e75235b814610380578263eb12d61e146101b157505063f2fde38b14610106575f80fd5b346101ad5760203660031901126101ad5761011f611496565b6101276119b5565b6001600160a01b03809116907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00826001600160a01b03198254161790557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346101ad5760203660031901126101ad576101ca611496565b906101d36119b5565b6001600160a01b03821692831561033d57835f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89008060205260ff825f2054166102d457845f526020525f20600160ff198254161790557f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901805491680100000000000000008310156102c15750816102749160016102939594019055611714565b9091906001600160a01b038084549260031b9316831b921b1916179055565b61029b611a00565b7f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f245f80a2005b604190634e487b7160e01b5f525260245ffd5b815162461bcd60e51b8152602081850152602860248201527f4b4d5356657269666965723a204164647265737320697320616c72656164792060448201527f61207369676e65720000000000000000000000000000000000000000000000006064820152608490fd5b906020606492519162461bcd60e51b8352820152601c60248201527f4b4d5356657269666965723a2041646472657373206973206e756c6c000000006044820152fd5b50346101ad575f3660031901126101ad576020907f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8902549051908152f35b50346101ad575f3660031901126101ad576103ed906103da611630565b9051918291602083526020830190611471565b0390f35b50346101ad575f3660031901126101ad576020906001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054169051908152f35b90346101ad5760803660031901126101ad57610451611496565b906024359267ffffffffffffffff908185116101ad57366023860112156101ad57848101359361048085611536565b9561048d85519788611514565b85875260209560248789019160051b830101913683116101ad576024889101915b8383106105bf57505050506044358381116101ad576104d0903690840161156a565b906064358481116101ad576104e890369085016115b0565b938551936060850191858310908311176102c15750855285830191858401976001600160a01b0380931685528352875261052061191f565b86815191012092511690519584518681019081888a51919a01905f5b8181106105ab575050509161059d9391836105656105a29897958c03601f198101835282611514565b519020905188815191012090875192898401948552888401526060830152608082015260808152610595816114f8565b519020611f15565b611a74565b90519015158152f35b82518c529a8a019a918a019160010161053c565b82358152918101918891016104ae565b346101ad57602090816003193601126101ad576105ea611496565b927ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009384549260ff84841c16159167ffffffffffffffff9081861695861580610a66575b60018098149081610a5c575b159081610a53575b50610a435767ffffffffffffffff1981168717895584610a24575b50610666611fc2565b61066e611fc2565b6001600160a01b03811615610a0e5761068690611ca8565b61068e6116db565b84519261069a846114dc565b868452603160f81b888501526106ae611fc2565b6106b6611fc2565b81518381116109fb577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10290806106ec8354611d36565b948b601f9687811161098c575b50508b9086831160011461090d575f92610902575b50505f19600383901b1c191690891b1790555b83519283116102c1575081907fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103936107598554611d36565b828111610894575b5088918311600114610817575f9261080c575b50505f19600383901b1c191690851b1790555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556107d357005b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29368ff000000000000000019815416905551908152a1005b015190508880610774565b90879350601f19831691855f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75925f5b8b82821061087e5750508411610866575b505050811b019055610787565b01515f1960f88460031b161c19169055888080610859565b8385015186558b97909501949384019301610848565b90919250845f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b758380860160051c8201928b87106108f9575b9186958b929594930160051c01915b8281106108eb575050610761565b5f81558695508a91016108dd565b925081926108ce565b015190508c8061070e565b5f8581528c94507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d929190601f198516908f5b828210610975575050841161095d575b505050811b019055610721565b01515f1960f88460031b161c191690558c8080610950565b8385015186558f979095019493840193018f610940565b90919250845f52867f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9181860160051c83019386106109f2575b918d91869594930160051c01915b8281106109e457508d91506106f9565b5f81558594508d91016109d4565b925081926109c6565b604182634e487b7160e01b5f525260245ffd5b8451631e4fbdf760e01b81525f81850152602490fd5b68ffffffffffffffffff1916680100000000000000011788558861065d565b855163f92ee8a960e01b81528490fd5b9050158a610642565b303b15915061063a565b508461062e565b50346101ad575f3660031901126101ad5780516103ed91610a8d826114dc565b600582527f352e302e30000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190611471565b50346101ad575f3660031901126101ad57805190817f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890190815480825260208092019081935f527f145a8827e9bfba2e12db7e3125e9c7a45032a77e46e5b19a76bb8dfdf3b3ce36905f5b818110610b8d5750505084610b49910385611514565b825181815293518185018190528493840192915f5b828110610b6d57505050500390f35b83516001600160a01b031685528695509381019392810192600101610b5e565b82546001600160a01b031684529284019260019283019201610b33565b50346101ad575f3660031901126101ad576103ed906103da61191f565b50346101ad575f3660031901126101ad576020906001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054169051908152f35b346101ad575f3660031901126101ad577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610d44575b15610d0257610c53611d6e565b91610c5c611e56565b815191602091602084019484861067ffffffffffffffff8711176102c15750610cb78260209287610caa99989795525f85528151988998600f60f81b8a5260e0868b015260e08a0190611471565b9188830390890152611471565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610ceb57505050500390f35b835185528695509381019392810192600101610cdc565b6020606492519162461bcd60e51b8352820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c46565b50346101ad5760203660031901126101ad576020906001600160a01b03610d92611496565b165f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900825260ff815f20541690519015158152f35b346101ad575f3660031901126101ad57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00541603610e1457610e1233611ca8565b005b602491519063118cdaa760e01b82523390820152fd5b346101ad575f3660031901126101ad57610e426119b5565b5f6001600160a01b036001600160a01b03197f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008181541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080549182169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90346101ad575f3660031901126101ad576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f3457602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b816003193601126101ad57610f54611496565b9160243567ffffffffffffffff81116101ad57610f74903690840161156a565b906001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016803014908115611153575b5061114357610fb86119b5565b8416918151946352d1902d60e01b865260209081878781885afa5f9781611114575b50610ff6578351634c9c8ce360e01b8152808701869052602490fd5b919490937f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc877fc9f76b5ec45e5cdef99837d7b6d2467235c1df8933c8ca56df5c35afa2c7d44481016110fe5750833b156110e757816001600160a01b03198254161790558351907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28551156110ce5750505f808585610e1297519101845af4913d156110c4573d6110b66110ad8261154e565b92519283611514565b81525f81943d92013e6120c0565b50606092506120c0565b935093505050346110db57005b63b398979f60e01b8152fd5b8451634c9c8ce360e01b8152808401839052602490fd5b83602491875191632a87526960e21b8352820152fd5b9097508281813d831161113c575b61112c8183611514565b810103126101ad57519688610fda565b503d611122565b815163703e46dd60e11b81528490fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141586610fab565b90346101ad57366003190160a081126101ad576080136101ad5780519167ffffffffffffffff9060808401828111858210176109fb5783526111c1611496565b845260208401906024358252604435946001600160a01b039283871687036101ad578582019687526064359684881688036101ad57606083019788526084359586116101ad5760209761121d61059d956105a2983691016115b0565b958080611228611630565b8c81519101209651169451935116915116918851938a8501958652898501526060840152608083015260a082015260a08152610595816114ac565b346101ad5760203660031901126101ad57610e1261127f611496565b6112876119b5565b61177b565b346101ad575f3660031901126101ad576112a46116db565b915f918151936112b3856114dc565b6001808652602094858701908636833760218801835b611421575b505090808551916112de836114dc565b818352878301908836833760218401835b6113e4575b50505f93875192611304846114dc565b808452898401958a36883760218501825b6113ae575b505050875199868b975190818c808b0192019161133692611450565b8701908a820161103b60f11b90525191826022830161135492611450565b01601760f91b938460228301525191826023830161137192611450565b019160238301525191826024830161138892611450565b0103908101845260240161139c9084611514565b5191818392835282016103ed91611471565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156113df57919082611315565b61131a565b9294925f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304908582156114185793956112ef565b509492946112f4565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049083826112c957506112ce565b5f5b8381106114615750505f910152565b8181015183820152602001611452565b9060209161148a81518092818552858086019101611450565b601f01601f1916010190565b600435906001600160a01b03821682036101ad57565b60c0810190811067ffffffffffffffff8211176114c857604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff8211176114c857604052565b60a0810190811067ffffffffffffffff8211176114c857604052565b90601f8019910116810190811067ffffffffffffffff8211176114c857604052565b67ffffffffffffffff81116114c85760051b60200190565b67ffffffffffffffff81116114c857601f01601f191660200190565b81601f820112156101ad578035906115818261154e565b9261158f6040519485611514565b828452602083830101116101ad57815f926020809301838601378301015290565b81601f820112156101ad578035916020916115ca84611536565b936115d86040519586611514565b808552838086019160051b830101928084116101ad57848301915b8483106116035750505050505090565b823567ffffffffffffffff81116101ad5786916116258484809489010161156a565b8152019201916115f3565b6040519061163d826114f8565b607582527f7265737320636f6e7472616374416464726573732900000000000000000000006080837f43697068657274657874566572696669636174696f6e466f724b4d532861646460208201527f726573732061636c416464726573732c6279746573333220686173684f66436960408201527f70686572746578742c616464726573732075736572416464726573732c61646460608201520152565b604051906116e8826114dc565b600b82527f4b4d5356657269666965720000000000000000000000000000000000000000006020830152565b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89018054821015611767575f527f145a8827e9bfba2e12db7e3125e9c7a45032a77e46e5b19a76bb8dfdf3b3ce3601905f90565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03809116805f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89008060205260ff60405f205416156118ce57815f5260205260405f2060ff1981541690555f5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901805490818310156118c75784918461180785611714565b949054600395861b1c1614611821575050506001016117cf565b9394919390925f1991808301919082116118b3576102748461184561185294611714565b905490891b1c1691611714565b8254801561189f57019261186584611714565b81939154921b1b1916905555611879611a00565b7f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b5f80a2565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5050505050565b60405162461bcd60e51b8152602060048201526024808201527f4b4d5356657269666965723a2041646472657373206973206e6f74206120736960448201526333b732b960e11b6064820152608490fd5b604051906080820182811067ffffffffffffffff8211176114c857604052605082527f646563727970746564526573756c7429000000000000000000000000000000006060837f44656372797074696f6e526573756c7428616464726573732061636c4164647260208201527f6573732c75696e743235365b5d2068616e646c65734c6973742c62797465732060408201520152565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036119e857565b60405163118cdaa760e01b8152336004820152602490fd5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901545f1981019081116118b35760039004600181018091116118b3577f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890255565b80518210156117675760209160051b010190565b908051918215611c57577f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890254808410611bec57611ab084611536565b91604090611ac16040519485611514565b858452611acd86611536565b60209190601f190136868401375f955f5b888110611af957505050505050611af59250611f95565b5f90565b611b19611b10611b098385611a60565b5185612003565b9092919261203d565b6001600160a01b038116805f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900865260ff875f20541615611ba857815c15611b84575b505085881015611b6f57600101611ade565b505050505050611b7f9250611f95565b600190565b611b918a8a9b939b611a60565b525f1981146118b3576001809101985d5f80611b5d565b865162461bcd60e51b815260048101879052601f60248201527f4b6d7356657269666965723a20496e76616c6964204b4d53207369676e6572006044820152606490fd5b60405162461bcd60e51b815260206004820152603d60248201527f4b6d7356657269666965723a206174206c65617374207468726573686f6c642060448201527f6e756d626572206f66207369676e6174757265732072657175697265640000006064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f4b6d7356657269666965723a206e6f207369676e6174757265732070726f766960448201526219195960ea1b6064820152608490fd5b6001600160a01b0319907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008281541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b0380931680948316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90600182811c92168015611d64575b6020831014611d5057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611d45565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10291825492611da284611d36565b80845293602091600191828116908115611e305750600114611dd0575b505050611dce92500383611514565b565b5f9081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b828410611e185750611dce9450505081016020015f8080611dbf565b85548885018301529485019487945092810192611dfc565b9250505060209250611dce94915060ff191682840152151560051b8201015f8080611dbf565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391825492611e8a84611d36565b80845293602091600191828116908115611e305750600114611eb557505050611dce92500383611514565b5f9081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b828410611efd5750611dce9450505081016020015f8080611dbf565b85548885018301529485019487945092810192611ee1565b604290611f20612123565b611f2861218d565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611f77816114ac565b519020906040519161190160f01b8352600283015260228201522090565b5f5b828110611fa357505050565b805f6001600160a01b03611fb960019486611a60565b51165d01611f97565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611ff157565b604051631afcd79f60e31b8152600490fd5b81519190604183036120335761202c9250602082015190606060408401519301515f1a906121d2565b9192909190565b50505f9160029190565b60048110156120ac578061204f575050565b600181036120695760405163f645eedf60e01b8152600490fd5b6002810361208a5760405163fce698f760e01b815260048101839052602490fd5b6003146120945750565b602490604051906335e2f38360e21b82526004820152fd5b634e487b7160e01b5f52602160045260245ffd5b906120e757508051156120d557805190602001fd5b60405163d6bda27560e01b8152600490fd5b8151158061211a575b6120f8575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156120f0565b61212b611d6e565b805190811561213b576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156121685790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612195611e56565b80519081156121a5576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156121685790565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612254579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612249575f516001600160a01b0381161561223f57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f916003919056fea164736f6c6343000818000a",
  "deployedBytecode": "0x60406080815260049081361015610014575f80fd5b5f3560e01c9182630d8e6e2c1461128c5782630e316ab7146112635782630e66e3f2146111815782631994b168146103bd5782634f1ef28614610f4157826352d1902d14610eca578263715018a614610e2a57826379ba509714610dc85782637df73e2714610d6d57826384b0196e14610c0d5782638da5cb5b14610bc757826392bacce414610baa57826394cf795e14610ac9578263ad3cb1cc14610a6d578263c4d66de8146105cf578263dd66628714610437578263e30c3978146103f1578263e6c51123146103bd578263e75235b814610380578263eb12d61e146101b157505063f2fde38b14610106575f80fd5b346101ad5760203660031901126101ad5761011f611496565b6101276119b5565b6001600160a01b03809116907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00826001600160a01b03198254161790557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b346101ad5760203660031901126101ad576101ca611496565b906101d36119b5565b6001600160a01b03821692831561033d57835f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89008060205260ff825f2054166102d457845f526020525f20600160ff198254161790557f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901805491680100000000000000008310156102c15750816102749160016102939594019055611714565b9091906001600160a01b038084549260031b9316831b921b1916179055565b61029b611a00565b7f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f245f80a2005b604190634e487b7160e01b5f525260245ffd5b815162461bcd60e51b8152602081850152602860248201527f4b4d5356657269666965723a204164647265737320697320616c72656164792060448201527f61207369676e65720000000000000000000000000000000000000000000000006064820152608490fd5b906020606492519162461bcd60e51b8352820152601c60248201527f4b4d5356657269666965723a2041646472657373206973206e756c6c000000006044820152fd5b50346101ad575f3660031901126101ad576020907f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8902549051908152f35b50346101ad575f3660031901126101ad576103ed906103da611630565b9051918291602083526020830190611471565b0390f35b50346101ad575f3660031901126101ad576020906001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054169051908152f35b90346101ad5760803660031901126101ad57610451611496565b906024359267ffffffffffffffff908185116101ad57366023860112156101ad57848101359361048085611536565b9561048d85519788611514565b85875260209560248789019160051b830101913683116101ad576024889101915b8383106105bf57505050506044358381116101ad576104d0903690840161156a565b906064358481116101ad576104e890369085016115b0565b938551936060850191858310908311176102c15750855285830191858401976001600160a01b0380931685528352875261052061191f565b86815191012092511690519584518681019081888a51919a01905f5b8181106105ab575050509161059d9391836105656105a29897958c03601f198101835282611514565b519020905188815191012090875192898401948552888401526060830152608082015260808152610595816114f8565b519020611f15565b611a74565b90519015158152f35b82518c529a8a019a918a019160010161053c565b82358152918101918891016104ae565b346101ad57602090816003193601126101ad576105ea611496565b927ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009384549260ff84841c16159167ffffffffffffffff9081861695861580610a66575b60018098149081610a5c575b159081610a53575b50610a435767ffffffffffffffff1981168717895584610a24575b50610666611fc2565b61066e611fc2565b6001600160a01b03811615610a0e5761068690611ca8565b61068e6116db565b84519261069a846114dc565b868452603160f81b888501526106ae611fc2565b6106b6611fc2565b81518381116109fb577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10290806106ec8354611d36565b948b601f9687811161098c575b50508b9086831160011461090d575f92610902575b50505f19600383901b1c191690891b1790555b83519283116102c1575081907fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103936107598554611d36565b828111610894575b5088918311600114610817575f9261080c575b50505f19600383901b1c191690851b1790555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556107d357005b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29368ff000000000000000019815416905551908152a1005b015190508880610774565b90879350601f19831691855f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75925f5b8b82821061087e5750508411610866575b505050811b019055610787565b01515f1960f88460031b161c19169055888080610859565b8385015186558b97909501949384019301610848565b90919250845f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b758380860160051c8201928b87106108f9575b9186958b929594930160051c01915b8281106108eb575050610761565b5f81558695508a91016108dd565b925081926108ce565b015190508c8061070e565b5f8581528c94507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d929190601f198516908f5b828210610975575050841161095d575b505050811b019055610721565b01515f1960f88460031b161c191690558c8080610950565b8385015186558f979095019493840193018f610940565b90919250845f52867f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9181860160051c83019386106109f2575b918d91869594930160051c01915b8281106109e457508d91506106f9565b5f81558594508d91016109d4565b925081926109c6565b604182634e487b7160e01b5f525260245ffd5b8451631e4fbdf760e01b81525f81850152602490fd5b68ffffffffffffffffff1916680100000000000000011788558861065d565b855163f92ee8a960e01b81528490fd5b9050158a610642565b303b15915061063a565b508461062e565b50346101ad575f3660031901126101ad5780516103ed91610a8d826114dc565b600582527f352e302e30000000000000000000000000000000000000000000000000000000602083015251918291602083526020830190611471565b50346101ad575f3660031901126101ad57805190817f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890190815480825260208092019081935f527f145a8827e9bfba2e12db7e3125e9c7a45032a77e46e5b19a76bb8dfdf3b3ce36905f5b818110610b8d5750505084610b49910385611514565b825181815293518185018190528493840192915f5b828110610b6d57505050500390f35b83516001600160a01b031685528695509381019392810192600101610b5e565b82546001600160a01b031684529284019260019283019201610b33565b50346101ad575f3660031901126101ad576103ed906103da61191f565b50346101ad575f3660031901126101ad576020906001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054169051908152f35b346101ad575f3660031901126101ad577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610d44575b15610d0257610c53611d6e565b91610c5c611e56565b815191602091602084019484861067ffffffffffffffff8711176102c15750610cb78260209287610caa99989795525f85528151988998600f60f81b8a5260e0868b015260e08a0190611471565b9188830390890152611471565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610ceb57505050500390f35b835185528695509381019392810192600101610cdc565b6020606492519162461bcd60e51b8352820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610c46565b50346101ad5760203660031901126101ad576020906001600160a01b03610d92611496565b165f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900825260ff815f20541690519015158152f35b346101ad575f3660031901126101ad57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00541603610e1457610e1233611ca8565b005b602491519063118cdaa760e01b82523390820152fd5b346101ad575f3660031901126101ad57610e426119b5565b5f6001600160a01b036001600160a01b03197f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008181541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080549182169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b90346101ad575f3660031901126101ad576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610f3457602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b816003193601126101ad57610f54611496565b9160243567ffffffffffffffff81116101ad57610f74903690840161156a565b906001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016803014908115611153575b5061114357610fb86119b5565b8416918151946352d1902d60e01b865260209081878781885afa5f9781611114575b50610ff6578351634c9c8ce360e01b8152808701869052602490fd5b919490937f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc877fc9f76b5ec45e5cdef99837d7b6d2467235c1df8933c8ca56df5c35afa2c7d44481016110fe5750833b156110e757816001600160a01b03198254161790558351907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28551156110ce5750505f808585610e1297519101845af4913d156110c4573d6110b66110ad8261154e565b92519283611514565b81525f81943d92013e6120c0565b50606092506120c0565b935093505050346110db57005b63b398979f60e01b8152fd5b8451634c9c8ce360e01b8152808401839052602490fd5b83602491875191632a87526960e21b8352820152fd5b9097508281813d831161113c575b61112c8183611514565b810103126101ad57519688610fda565b503d611122565b815163703e46dd60e11b81528490fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141586610fab565b90346101ad57366003190160a081126101ad576080136101ad5780519167ffffffffffffffff9060808401828111858210176109fb5783526111c1611496565b845260208401906024358252604435946001600160a01b039283871687036101ad578582019687526064359684881688036101ad57606083019788526084359586116101ad5760209761121d61059d956105a2983691016115b0565b958080611228611630565b8c81519101209651169451935116915116918851938a8501958652898501526060840152608083015260a082015260a08152610595816114ac565b346101ad5760203660031901126101ad57610e1261127f611496565b6112876119b5565b61177b565b346101ad575f3660031901126101ad576112a46116db565b915f918151936112b3856114dc565b6001808652602094858701908636833760218801835b611421575b505090808551916112de836114dc565b818352878301908836833760218401835b6113e4575b50505f93875192611304846114dc565b808452898401958a36883760218501825b6113ae575b505050875199868b975190818c808b0192019161133692611450565b8701908a820161103b60f11b90525191826022830161135492611450565b01601760f91b938460228301525191826023830161137192611450565b019160238301525191826024830161138892611450565b0103908101845260240161139c9084611514565b5191818392835282016103ed91611471565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156113df57919082611315565b61131a565b9294925f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304908582156114185793956112ef565b509492946112f4565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049083826112c957506112ce565b5f5b8381106114615750505f910152565b8181015183820152602001611452565b9060209161148a81518092818552858086019101611450565b601f01601f1916010190565b600435906001600160a01b03821682036101ad57565b60c0810190811067ffffffffffffffff8211176114c857604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff8211176114c857604052565b60a0810190811067ffffffffffffffff8211176114c857604052565b90601f8019910116810190811067ffffffffffffffff8211176114c857604052565b67ffffffffffffffff81116114c85760051b60200190565b67ffffffffffffffff81116114c857601f01601f191660200190565b81601f820112156101ad578035906115818261154e565b9261158f6040519485611514565b828452602083830101116101ad57815f926020809301838601378301015290565b81601f820112156101ad578035916020916115ca84611536565b936115d86040519586611514565b808552838086019160051b830101928084116101ad57848301915b8483106116035750505050505090565b823567ffffffffffffffff81116101ad5786916116258484809489010161156a565b8152019201916115f3565b6040519061163d826114f8565b607582527f7265737320636f6e7472616374416464726573732900000000000000000000006080837f43697068657274657874566572696669636174696f6e466f724b4d532861646460208201527f726573732061636c416464726573732c6279746573333220686173684f66436960408201527f70686572746578742c616464726573732075736572416464726573732c61646460608201520152565b604051906116e8826114dc565b600b82527f4b4d5356657269666965720000000000000000000000000000000000000000006020830152565b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89018054821015611767575f527f145a8827e9bfba2e12db7e3125e9c7a45032a77e46e5b19a76bb8dfdf3b3ce3601905f90565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03809116805f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce89008060205260ff60405f205416156118ce57815f5260205260405f2060ff1981541690555f5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901805490818310156118c75784918461180785611714565b949054600395861b1c1614611821575050506001016117cf565b9394919390925f1991808301919082116118b3576102748461184561185294611714565b905490891b1c1691611714565b8254801561189f57019261186584611714565b81939154921b1b1916905555611879611a00565b7f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b5f80a2565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5050505050565b60405162461bcd60e51b8152602060048201526024808201527f4b4d5356657269666965723a2041646472657373206973206e6f74206120736960448201526333b732b960e11b6064820152608490fd5b604051906080820182811067ffffffffffffffff8211176114c857604052605082527f646563727970746564526573756c7429000000000000000000000000000000006060837f44656372797074696f6e526573756c7428616464726573732061636c4164647260208201527f6573732c75696e743235365b5d2068616e646c65734c6973742c62797465732060408201520152565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036119e857565b60405163118cdaa760e01b8152336004820152602490fd5b7f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8901545f1981019081116118b35760039004600181018091116118b3577f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890255565b80518210156117675760209160051b010190565b908051918215611c57577f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce890254808410611bec57611ab084611536565b91604090611ac16040519485611514565b858452611acd86611536565b60209190601f190136868401375f955f5b888110611af957505050505050611af59250611f95565b5f90565b611b19611b10611b098385611a60565b5185612003565b9092919261203d565b6001600160a01b038116805f527f7e81a744be86773af8644dd7304fa1dc9350ccabf16cfcaa614ddb78b4ce8900865260ff875f20541615611ba857815c15611b84575b505085881015611b6f57600101611ade565b505050505050611b7f9250611f95565b600190565b611b918a8a9b939b611a60565b525f1981146118b3576001809101985d5f80611b5d565b865162461bcd60e51b815260048101879052601f60248201527f4b6d7356657269666965723a20496e76616c6964204b4d53207369676e6572006044820152606490fd5b60405162461bcd60e51b815260206004820152603d60248201527f4b6d7356657269666965723a206174206c65617374207468726573686f6c642060448201527f6e756d626572206f66207369676e6174757265732072657175697265640000006064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f4b6d7356657269666965723a206e6f207369676e6174757265732070726f766960448201526219195960ea1b6064820152608490fd5b6001600160a01b0319907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008281541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b0380931680948316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90600182811c92168015611d64575b6020831014611d5057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611d45565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10291825492611da284611d36565b80845293602091600191828116908115611e305750600114611dd0575b505050611dce92500383611514565b565b5f9081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b828410611e185750611dce9450505081016020015f8080611dbf565b85548885018301529485019487945092810192611dfc565b9250505060209250611dce94915060ff191682840152151560051b8201015f8080611dbf565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391825492611e8a84611d36565b80845293602091600191828116908115611e305750600114611eb557505050611dce92500383611514565b5f9081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b828410611efd5750611dce9450505081016020015f8080611dbf565b85548885018301529485019487945092810192611ee1565b604290611f20612123565b611f2861218d565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611f77816114ac565b519020906040519161190160f01b8352600283015260228201522090565b5f5b828110611fa357505050565b805f6001600160a01b03611fb960019486611a60565b51165d01611f97565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611ff157565b604051631afcd79f60e31b8152600490fd5b81519190604183036120335761202c9250602082015190606060408401519301515f1a906121d2565b9192909190565b50505f9160029190565b60048110156120ac578061204f575050565b600181036120695760405163f645eedf60e01b8152600490fd5b6002810361208a5760405163fce698f760e01b815260048101839052602490fd5b6003146120945750565b602490604051906335e2f38360e21b82526004820152fd5b634e487b7160e01b5f52602160045260245ffd5b906120e757508051156120d557805190602001fd5b60405163d6bda27560e01b8152600490fd5b8151158061211a575b6120f8575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156120f0565b61212b611d6e565b805190811561213b576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156121685790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612195611e56565b80519081156121a5576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156121685790565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612254579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612249575f516001600160a01b0381161561223f57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f916003919056fea164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
