{
  "_format": "hh-sol-artifact-1",
  "contractName": "DNSSECImpl",
  "sourceName": "contracts/dnssec-oracle/DNSSECImpl.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_anchors",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "class",
          "type": "uint16"
        }
      ],
      "name": "InvalidClass",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "labelsExpected",
          "type": "uint256"
        }
      ],
      "name": "InvalidLabelCount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "proofType",
          "type": "uint16"
        }
      ],
      "name": "InvalidProofType",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidRRSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "rrsetName",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "signerName",
          "type": "bytes"
        }
      ],
      "name": "InvalidSignerName",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "signerName",
          "type": "bytes"
        }
      ],
      "name": "NoMatchingProof",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "signerName",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "proofName",
          "type": "bytes"
        }
      ],
      "name": "ProofNameMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "expiration",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "now",
          "type": "uint32"
        }
      ],
      "name": "SignatureExpired",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "inception",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "now",
          "type": "uint32"
        }
      ],
      "name": "SignatureNotValidYet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "rrsetType",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "sigType",
          "type": "uint16"
        }
      ],
      "name": "SignatureTypeMismatch",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "AlgorithmUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "DigestUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "algorithms",
      "outputs": [
        {
          "internalType": "contract Algorithm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anchors",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "digests",
      "outputs": [
        {
          "internalType": "contract Digest",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract Algorithm",
          "name": "algo",
          "type": "address"
        }
      ],
      "name": "setAlgorithm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "id",
          "type": "uint8"
        },
        {
          "internalType": "contract Digest",
          "name": "digest",
          "type": "address"
        }
      ],
      "name": "setDigest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature[]",
          "name": "input",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "now",
          "type": "uint256"
        }
      ],
      "name": "verifyRRSet",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "rrs",
          "type": "bytes"
        },
        {
          "internalType": "uint32",
          "name": "inception",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature[]",
          "name": "input",
          "type": "tuple[]"
        }
      ],
      "name": "verifyRRSet",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "rrs",
          "type": "bytes"
        },
        {
          "internalType": "uint32",
          "name": "inception",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200230038038062002300833981016040819052620000349162000072565b600180546001600160a01b031916331790556000620000548282620001d6565b5050620002a2565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200008657600080fd5b82516001600160401b03808211156200009e57600080fd5b818501915085601f830112620000b357600080fd5b815181811115620000c857620000c86200005c565b604051601f8201601f19908116603f01168101908382118183101715620000f357620000f36200005c565b8160405282815288868487010111156200010c57600080fd5b600093505b8284101562000130578484018601518185018701529285019262000111565b600086848301015280965050505050505092915050565b600181811c908216806200015c57607f821691505b6020821081036200017d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001d157600081815260208120601f850160051c81016020861015620001ac5750805b601f850160051c820191505b81811015620001cd57828155600101620001b8565b5050505b505050565b81516001600160401b03811115620001f257620001f26200005c565b6200020a8162000203845462000147565b8462000183565b602080601f831160018114620002425760008415620002295750858301515b600019600386901b1c1916600185901b178555620001cd565b600085815260208120601f198616915b82811015620002735788860151825594840194600190910190840162000252565b5085821015620002925787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61204e80620002b26000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806373cc48a61161007657806398d35f201161005b57806398d35f2014610188578063bdf95fef1461019d578063c327deef146101b057600080fd5b806373cc48a61461010d5780638da5cb5b1461016857600080fd5b8063020ed8d3146100a857806313af4035146100bd57806328e7677d146100d0578063440f3d42146100e3575b600080fd5b6100bb6100b63660046119c9565b6101e6565b005b6100bb6100cb366004611a00565b61029a565b6100bb6100de3660046119c9565b610305565b6100f66100f1366004611c6a565b6103b1565b604051610104929190611d13565b60405180910390f35b61014361011b366004611d3b565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b6001546101439073ffffffffffffffffffffffffffffffffffffffff1681565b6101906104a3565b6040516101049190611d56565b6100f66101ab366004611d69565b610531565b6101436101be366004611d3b565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461020a57600080fd5b60ff821660008181526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102be57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16331461032957600080fd5b60ff821660008181526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c7910161028e565b6060600080600080546103c390611d9e565b80601f01602080910402602001604051908101604052809291908181526020018280546103ef90611d9e565b801561043c5780601f106104115761010080835404028352916020019161043c565b820191906000526020600020905b81548152906001019060200180831161041f57829003601f168201915b5050505050905060005b855181101561049957600061047587838151811061046657610466611deb565b60200260200101518488610548565b61010081015160a0909101519450925081905061049181611e49565b915050610446565b5091509250929050565b600080546104b090611d9e565b80601f01602080910402602001604051908101604052809291908181526020018280546104dc90611d9e565b80156105295780601f106104fe57610100808354040283529160200191610529565b820191906000526020600020905b81548152906001019060200180831161050c57829003601f168201915b505050505081565b6060600061053f83426103b1565b91509150915091565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915283516105a6906106e8565b905060006105b882836000015161082a565b604083015190915060ff166105ce826000610987565b14610616578082604001516040517fe861b2bd00000000000000000000000000000000000000000000000000000000815260040161060d929190611e81565b60405180910390fd5b6101208201819052608082015161062d90846109ed565b6106795760808201516040517fa784f87e00000000000000000000000000000000000000000000000000000000815263ffffffff9182166004820152908416602482015260440161060d565b610687838360a001516109ed565b6106d35760a08201516040517fbd41036a00000000000000000000000000000000000000000000000000000000815263ffffffff9182166004820152908416602482015260440161060d565b6106df81838787610a06565b505b9392505050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201819052610100820181905261012082015290610743908390610b10565b61ffff168152610754826002610b38565b60ff166020820152610767826003610b38565b60ff16604082015261077a826004610b5c565b63ffffffff9081166060830152610796908390600890610b5c16565b63ffffffff90811660808301526107b2908390600c90610b5c16565b63ffffffff90811660a08301526107ce908390601090610b1016565b61ffff1660c08201526107e2826012610b86565b60e082018190525161081f906107f9906012611ea6565b8260e00151516012855161080d9190611eb9565b6108179190611eb9565b849190610ba9565b610100820152919050565b6060600061083784610c2b565b90505b8051516020820151101561098057606081015161ffff166001146108965760608101516040517f98a5f31a00000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161060d565b81516000036108af576108a881610c89565b9150610919565b602081015181516108bf91610caa565b82511415806108e257508051602082015183516108e0928592600092610d04565b155b15610919576040517fcbceee6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff16816040015161ffff16146109725760408082015190517fa6ff8a8a00000000000000000000000000000000000000000000000000000000815261ffff9182166004820152908416602482015260440161060d565b61097b81610d27565b61083a565b5092915050565b6000805b8351831061099b5761099b611ecc565b60006109a78585610b38565b60ff1690506109b7816001611ea6565b6109c19085611ea6565b9350806000036109d157506109e4565b6109dc600183611ea6565b91505061098b565b90505b92915050565b6000806109fa8385611efb565b60030b12159392505050565b83518360e00151511180610a3c5750610a3a6000858560e00151518751610a2d9190611eb9565b60e0870151929190610e0f565b155b15610a7a5760e08301516040517feaafc59b00000000000000000000000000000000000000000000000000000000815261060d918691600401611f3d565b6000610a868282610e44565b9050602b61ffff16816040015161ffff1603610aac57610aa7848483610ea5565b610b09565b603061ffff16816040015161ffff1603610acb57610aa7848483610fae565b60408082015190517f61529e8700000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161060d565b5050505050565b8151600090610b20836002611ea6565b1115610b2b57600080fd5b50016002015161ffff1690565b6000828281518110610b4c57610b4c611deb565b016020015160f81c905092915050565b8151600090610b6c836004611ea6565b1115610b7757600080fd5b50016004015163ffffffff1690565b60606000610b948484610caa565b9050610ba1848483610ba9565b949350505050565b8251606090610bb88385611ea6565b1115610bc357600080fd5b60008267ffffffffffffffff811115610bde57610bde611a1d565b6040519080825280601f01601f191660200182016040528015610c08576020820181803683370190505b50905060208082019086860101610c208282876110a8565b509095945050505050565b610c796040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b6109e78261010001516000610e44565b602081015181516060916109e791610ca19082610caa565b84519190610ba9565b6000815b83518110610cbe57610cbe611ecc565b6000610cca8583610b38565b60ff169050610cda816001611ea6565b610ce49083611ea6565b915080600003610cf45750610cfa565b50610cae565b610ba18382611eb9565b6000610d1184848461111c565b610d1c87878561111c565b149695505050505050565b60c08101516020820181905281515111610d3e5750565b6000610d5282600001518360200151610caa565b8260200151610d619190611ea6565b8251909150610d709082610b10565b61ffff166040830152610d84600282611ea6565b8251909150610d939082610b10565b61ffff166060830152610da7600282611ea6565b8251909150610db69082610b5c565b63ffffffff166080830152610dcc600482611ea6565b8251909150600090610dde9083610b10565b61ffff169050610def600283611ea6565b60a084018190529150610e028183611ea6565b60c0909301929092525050565b6000610e288383848651610e239190611eb9565b61111c565b610e3a8686878951610e239190611eb9565b1495945050505050565b610e926040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c081018290526109e781610d27565b6000610eb084610c2b565b90505b80515160208201511015610f7557604081015161ffff16603014610f0f5760408082015190517f61529e8700000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161060d565b6000610f1a82611140565b90506000610f35600083518461115c9092919063ffffffff16565b9050610f43818388886111fa565b15610f6557610f588660e0015185838561132f565b15610f6557505050505050565b5050610f7081610d27565b610eb3565b508260e001516040517f06cde0f300000000000000000000000000000000000000000000000000000000815260040161060d9190611d56565b80515160208201511015611070576000610fc782610c89565b9050610fe08460e001518261148590919063ffffffff16565b61101e578360e00151816040517fd700ae7e00000000000000000000000000000000000000000000000000000000815260040161060d929190611f3d565b600061102983611140565b90506000611044600083518461115c9092919063ffffffff16565b9050611052818388886111fa565b1561105f57505050505050565b50505061106b81610d27565b610fae565b8260e001516040517f06cde0f300000000000000000000000000000000000000000000000000000000815260040161060d9190611d56565b602081106110e057815183526110bf602084611ea6565b92506110cc602083611ea6565b91506110d9602082611eb9565b90506110a8565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b825160009061112b8385611ea6565b111561113657600080fd5b5091016020012090565b60a081015160c08201516060916109e791610ca1908290611eb9565b604080516080810182526000808252602082018190529181019190915260608082015261119461118d600085611ea6565b8590610b10565b61ffff1681526111af6111a8600285611ea6565b8590610b38565b60ff1660208201526111c56111a8600385611ea6565b60ff1660408201526111ee6111db600485611ea6565b6111e6600485611eb9565b869190610ba9565b60608201529392505050565b6000846020015160ff1660031461121357506000610ba1565b826020015160ff16856040015160ff161461123057506000610ba1565b600061123b856114a3565b90508360c0015161ffff168161ffff161461125a576000915050610ba1565b855161010016600003611271576000915050610ba1565b60408087015160ff16600090815260026020908152908290205485519186015192517fde8f50a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169263de8f50a1926112e4928a9290600401611f6b565b602060405180830381865afa158015611301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113259190611fa4565b9695505050505050565b60008061133b836114a3565b90505b8451516020860151101561147957600061135786610c89565b90506113638188611485565b61139d5786816040517fd700ae7e00000000000000000000000000000000000000000000000000000000815260040161060d929190611f3d565b60a086015160c08701516000916113c2916113b9908290611eb9565b8951919061115c565b90508261ffff16816000015161ffff16146113de57505061146b565b856040015160ff16816020015160ff16146113fa57505061146b565b60408051808201909152606081526000602082015261142786518a516114209190611ea6565b82906116e7565b50611432818a61174c565b5061143d818761174c565b50611455826040015182600001518460600151611773565b15611467576001945050505050610ba1565b5050505b61147485610d27565b61133e565b50600095945050505050565b6000815183511480156109e457506109e48360008460008751610d04565b600061200082511115611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c6f6e67206b657973206e6f74207065726d6974746564000000000000000000604482015260640161060d565b60008060005b8451601f01811015611587576000816020870101519050855182602001111561154d5785518290036008026101000390811c901b5b7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff600882901c81169490940193169190910190602001611518565b506010827fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff160191506010817fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1601905080600883901b0191506020827fffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000016901c827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff160191506040827fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016901c8277ffffffffffffffff0000000000000000ffffffffffffffff16019150608082901c826fffffffffffffffffffffffffffffffff16019150601082901c61ffff16820191508192505050919050565b604080518082019091526060815260006020820152611707602083611fc6565b1561172f57611717602083611fc6565b611722906020611eb9565b61172c9083611ea6565b91505b506020828101829052604080518085526000815290920101905290565b6040805180820190915260608152600060208201526109e483846000015151848551611852565b60ff831660009081526003602052604081205473ffffffffffffffffffffffffffffffffffffffff166117a8575060006106e1565b60ff8416600090815260036020526040908190205490517ff7e83aee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f7e83aee906118119086908690600401611f3d565b602060405180830381865afa15801561182e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba19190611fa4565b604080518082019091526060815260006020820152825182111561187557600080fd5b60208501516118848386611ea6565b11156118b7576118b7856118a7876020015187866118a29190611ea6565b61195a565b6118b2906002612001565b611971565b6000808651805187602083010193508088870111156118d65787860182525b505050602084015b6020841061191657805182526118f5602083611ea6565b9150611902602082611ea6565b905061190f602085611eb9565b93506118de565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b60008183111561196b5750816109e7565b50919050565b815161197d83836116e7565b50611988838261174c565b50505050565b803560ff8116811461199f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146119c657600080fd5b50565b600080604083850312156119dc57600080fd5b6119e58361198e565b915060208301356119f5816119a4565b809150509250929050565b600060208284031215611a1257600080fd5b81356109e4816119a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611a6f57611a6f611a1d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611abc57611abc611a1d565b604052919050565b600082601f830112611ad557600080fd5b813567ffffffffffffffff811115611aef57611aef611a1d565b611b2060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611a75565b818152846020838601011115611b3557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112611b6357600080fd5b8135602067ffffffffffffffff80831115611b8057611b80611a1d565b8260051b611b8f838201611a75565b9384528581018301938381019088861115611ba957600080fd5b84880192505b85831015611c5e57823584811115611bc75760008081fd5b88016040818b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315611bfd5760008081fd5b611c05611a4c565b8783013587811115611c175760008081fd5b611c258d8a83870101611ac4565b825250908201359086821115611c3b5760008081fd5b611c498c8984860101611ac4565b81890152845250509184019190840190611baf565b98975050505050505050565b60008060408385031215611c7d57600080fd5b823567ffffffffffffffff811115611c9457600080fd5b611ca085828601611b52565b95602094909401359450505050565b6000815180845260005b81811015611cd557602081850181015186830182015201611cb9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081526000611d266040830185611caf565b905063ffffffff831660208301529392505050565b600060208284031215611d4d57600080fd5b6109e48261198e565b6020815260006109e46020830184611caf565b600060208284031215611d7b57600080fd5b813567ffffffffffffffff811115611d9257600080fd5b610ba184828501611b52565b600181811c90821680611db257607f821691505b60208210810361196b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e7a57611e7a611e1a565b5060010190565b604081526000611e946040830185611caf565b905060ff831660208301529392505050565b808201808211156109e7576109e7611e1a565b818103818111156109e7576109e7611e1a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600382810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000008112637fffffff821317156109e7576109e7611e1a565b604081526000611f506040830185611caf565b8281036020840152611f628185611caf565b95945050505050565b606081526000611f7e6060830186611caf565b8281036020840152611f908186611caf565b905082810360408401526113258185611caf565b600060208284031215611fb657600080fd5b815180151581146109e457600080fd5b600082611ffc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b80820281158282048414176109e7576109e7611e1a56fea2646970667358221220c3d5b08c6410542245f7d08e346f164421d4ab3cde6d3e994f2092fd1380f35c64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c806373cc48a61161007657806398d35f201161005b57806398d35f2014610188578063bdf95fef1461019d578063c327deef146101b057600080fd5b806373cc48a61461010d5780638da5cb5b1461016857600080fd5b8063020ed8d3146100a857806313af4035146100bd57806328e7677d146100d0578063440f3d42146100e3575b600080fd5b6100bb6100b63660046119c9565b6101e6565b005b6100bb6100cb366004611a00565b61029a565b6100bb6100de3660046119c9565b610305565b6100f66100f1366004611c6a565b6103b1565b604051610104929190611d13565b60405180910390f35b61014361011b366004611d3b565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b6001546101439073ffffffffffffffffffffffffffffffffffffffff1681565b6101906104a3565b6040516101049190611d56565b6100f66101ab366004611d69565b610531565b6101436101be366004611d3b565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16331461020a57600080fd5b60ff821660008181526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527ff73c3c226af96b7f1ba666a21b3ceaf2be3ee6a365e3178fd9cd1eaae0075aa891015b60405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102be57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16331461032957600080fd5b60ff821660008181526003602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301527f2fcc274c3b72dd483ab201bfa87295e3817e8b9b10693219873b722ca1af00c7910161028e565b6060600080600080546103c390611d9e565b80601f01602080910402602001604051908101604052809291908181526020018280546103ef90611d9e565b801561043c5780601f106104115761010080835404028352916020019161043c565b820191906000526020600020905b81548152906001019060200180831161041f57829003601f168201915b5050505050905060005b855181101561049957600061047587838151811061046657610466611deb565b60200260200101518488610548565b61010081015160a0909101519450925081905061049181611e49565b915050610446565b5091509250929050565b600080546104b090611d9e565b80601f01602080910402602001604051908101604052809291908181526020018280546104dc90611d9e565b80156105295780601f106104fe57610100808354040283529160200191610529565b820191906000526020600020905b81548152906001019060200180831161050c57829003601f168201915b505050505081565b6060600061053f83426103b1565b91509150915091565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915283516105a6906106e8565b905060006105b882836000015161082a565b604083015190915060ff166105ce826000610987565b14610616578082604001516040517fe861b2bd00000000000000000000000000000000000000000000000000000000815260040161060d929190611e81565b60405180910390fd5b6101208201819052608082015161062d90846109ed565b6106795760808201516040517fa784f87e00000000000000000000000000000000000000000000000000000000815263ffffffff9182166004820152908416602482015260440161060d565b610687838360a001516109ed565b6106d35760a08201516040517fbd41036a00000000000000000000000000000000000000000000000000000000815263ffffffff9182166004820152908416602482015260440161060d565b6106df81838787610a06565b505b9392505050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201819052610100820181905261012082015290610743908390610b10565b61ffff168152610754826002610b38565b60ff166020820152610767826003610b38565b60ff16604082015261077a826004610b5c565b63ffffffff9081166060830152610796908390600890610b5c16565b63ffffffff90811660808301526107b2908390600c90610b5c16565b63ffffffff90811660a08301526107ce908390601090610b1016565b61ffff1660c08201526107e2826012610b86565b60e082018190525161081f906107f9906012611ea6565b8260e00151516012855161080d9190611eb9565b6108179190611eb9565b849190610ba9565b610100820152919050565b6060600061083784610c2b565b90505b8051516020820151101561098057606081015161ffff166001146108965760608101516040517f98a5f31a00000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161060d565b81516000036108af576108a881610c89565b9150610919565b602081015181516108bf91610caa565b82511415806108e257508051602082015183516108e0928592600092610d04565b155b15610919576040517fcbceee6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8261ffff16816040015161ffff16146109725760408082015190517fa6ff8a8a00000000000000000000000000000000000000000000000000000000815261ffff9182166004820152908416602482015260440161060d565b61097b81610d27565b61083a565b5092915050565b6000805b8351831061099b5761099b611ecc565b60006109a78585610b38565b60ff1690506109b7816001611ea6565b6109c19085611ea6565b9350806000036109d157506109e4565b6109dc600183611ea6565b91505061098b565b90505b92915050565b6000806109fa8385611efb565b60030b12159392505050565b83518360e00151511180610a3c5750610a3a6000858560e00151518751610a2d9190611eb9565b60e0870151929190610e0f565b155b15610a7a5760e08301516040517feaafc59b00000000000000000000000000000000000000000000000000000000815261060d918691600401611f3d565b6000610a868282610e44565b9050602b61ffff16816040015161ffff1603610aac57610aa7848483610ea5565b610b09565b603061ffff16816040015161ffff1603610acb57610aa7848483610fae565b60408082015190517f61529e8700000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161060d565b5050505050565b8151600090610b20836002611ea6565b1115610b2b57600080fd5b50016002015161ffff1690565b6000828281518110610b4c57610b4c611deb565b016020015160f81c905092915050565b8151600090610b6c836004611ea6565b1115610b7757600080fd5b50016004015163ffffffff1690565b60606000610b948484610caa565b9050610ba1848483610ba9565b949350505050565b8251606090610bb88385611ea6565b1115610bc357600080fd5b60008267ffffffffffffffff811115610bde57610bde611a1d565b6040519080825280601f01601f191660200182016040528015610c08576020820181803683370190505b50905060208082019086860101610c208282876110a8565b509095945050505050565b610c796040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b6109e78261010001516000610e44565b602081015181516060916109e791610ca19082610caa565b84519190610ba9565b6000815b83518110610cbe57610cbe611ecc565b6000610cca8583610b38565b60ff169050610cda816001611ea6565b610ce49083611ea6565b915080600003610cf45750610cfa565b50610cae565b610ba18382611eb9565b6000610d1184848461111c565b610d1c87878561111c565b149695505050505050565b60c08101516020820181905281515111610d3e5750565b6000610d5282600001518360200151610caa565b8260200151610d619190611ea6565b8251909150610d709082610b10565b61ffff166040830152610d84600282611ea6565b8251909150610d939082610b10565b61ffff166060830152610da7600282611ea6565b8251909150610db69082610b5c565b63ffffffff166080830152610dcc600482611ea6565b8251909150600090610dde9083610b10565b61ffff169050610def600283611ea6565b60a084018190529150610e028183611ea6565b60c0909301929092525050565b6000610e288383848651610e239190611eb9565b61111c565b610e3a8686878951610e239190611eb9565b1495945050505050565b610e926040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c081018290526109e781610d27565b6000610eb084610c2b565b90505b80515160208201511015610f7557604081015161ffff16603014610f0f5760408082015190517f61529e8700000000000000000000000000000000000000000000000000000000815261ffff909116600482015260240161060d565b6000610f1a82611140565b90506000610f35600083518461115c9092919063ffffffff16565b9050610f43818388886111fa565b15610f6557610f588660e0015185838561132f565b15610f6557505050505050565b5050610f7081610d27565b610eb3565b508260e001516040517f06cde0f300000000000000000000000000000000000000000000000000000000815260040161060d9190611d56565b80515160208201511015611070576000610fc782610c89565b9050610fe08460e001518261148590919063ffffffff16565b61101e578360e00151816040517fd700ae7e00000000000000000000000000000000000000000000000000000000815260040161060d929190611f3d565b600061102983611140565b90506000611044600083518461115c9092919063ffffffff16565b9050611052818388886111fa565b1561105f57505050505050565b50505061106b81610d27565b610fae565b8260e001516040517f06cde0f300000000000000000000000000000000000000000000000000000000815260040161060d9190611d56565b602081106110e057815183526110bf602084611ea6565b92506110cc602083611ea6565b91506110d9602082611eb9565b90506110a8565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b825160009061112b8385611ea6565b111561113657600080fd5b5091016020012090565b60a081015160c08201516060916109e791610ca1908290611eb9565b604080516080810182526000808252602082018190529181019190915260608082015261119461118d600085611ea6565b8590610b10565b61ffff1681526111af6111a8600285611ea6565b8590610b38565b60ff1660208201526111c56111a8600385611ea6565b60ff1660408201526111ee6111db600485611ea6565b6111e6600485611eb9565b869190610ba9565b60608201529392505050565b6000846020015160ff1660031461121357506000610ba1565b826020015160ff16856040015160ff161461123057506000610ba1565b600061123b856114a3565b90508360c0015161ffff168161ffff161461125a576000915050610ba1565b855161010016600003611271576000915050610ba1565b60408087015160ff16600090815260026020908152908290205485519186015192517fde8f50a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169263de8f50a1926112e4928a9290600401611f6b565b602060405180830381865afa158015611301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113259190611fa4565b9695505050505050565b60008061133b836114a3565b90505b8451516020860151101561147957600061135786610c89565b90506113638188611485565b61139d5786816040517fd700ae7e00000000000000000000000000000000000000000000000000000000815260040161060d929190611f3d565b60a086015160c08701516000916113c2916113b9908290611eb9565b8951919061115c565b90508261ffff16816000015161ffff16146113de57505061146b565b856040015160ff16816020015160ff16146113fa57505061146b565b60408051808201909152606081526000602082015261142786518a516114209190611ea6565b82906116e7565b50611432818a61174c565b5061143d818761174c565b50611455826040015182600001518460600151611773565b15611467576001945050505050610ba1565b5050505b61147485610d27565b61133e565b50600095945050505050565b6000815183511480156109e457506109e48360008460008751610d04565b600061200082511115611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4c6f6e67206b657973206e6f74207065726d6974746564000000000000000000604482015260640161060d565b60008060005b8451601f01811015611587576000816020870101519050855182602001111561154d5785518290036008026101000390811c901b5b7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff600882901c81169490940193169190910190602001611518565b506010827fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff160191506010817fffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff000016901c817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1601905080600883901b0191506020827fffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000000016901c827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff160191506040827fffffffffffffffff0000000000000000ffffffffffffffff000000000000000016901c8277ffffffffffffffff0000000000000000ffffffffffffffff16019150608082901c826fffffffffffffffffffffffffffffffff16019150601082901c61ffff16820191508192505050919050565b604080518082019091526060815260006020820152611707602083611fc6565b1561172f57611717602083611fc6565b611722906020611eb9565b61172c9083611ea6565b91505b506020828101829052604080518085526000815290920101905290565b6040805180820190915260608152600060208201526109e483846000015151848551611852565b60ff831660009081526003602052604081205473ffffffffffffffffffffffffffffffffffffffff166117a8575060006106e1565b60ff8416600090815260036020526040908190205490517ff7e83aee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f7e83aee906118119086908690600401611f3d565b602060405180830381865afa15801561182e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba19190611fa4565b604080518082019091526060815260006020820152825182111561187557600080fd5b60208501516118848386611ea6565b11156118b7576118b7856118a7876020015187866118a29190611ea6565b61195a565b6118b2906002612001565b611971565b6000808651805187602083010193508088870111156118d65787860182525b505050602084015b6020841061191657805182526118f5602083611ea6565b9150611902602082611ea6565b905061190f602085611eb9565b93506118de565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b60008183111561196b5750816109e7565b50919050565b815161197d83836116e7565b50611988838261174c565b50505050565b803560ff8116811461199f57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811681146119c657600080fd5b50565b600080604083850312156119dc57600080fd5b6119e58361198e565b915060208301356119f5816119a4565b809150509250929050565b600060208284031215611a1257600080fd5b81356109e4816119a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611a6f57611a6f611a1d565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611abc57611abc611a1d565b604052919050565b600082601f830112611ad557600080fd5b813567ffffffffffffffff811115611aef57611aef611a1d565b611b2060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611a75565b818152846020838601011115611b3557600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112611b6357600080fd5b8135602067ffffffffffffffff80831115611b8057611b80611a1d565b8260051b611b8f838201611a75565b9384528581018301938381019088861115611ba957600080fd5b84880192505b85831015611c5e57823584811115611bc75760008081fd5b88016040818b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001811315611bfd5760008081fd5b611c05611a4c565b8783013587811115611c175760008081fd5b611c258d8a83870101611ac4565b825250908201359086821115611c3b5760008081fd5b611c498c8984860101611ac4565b81890152845250509184019190840190611baf565b98975050505050505050565b60008060408385031215611c7d57600080fd5b823567ffffffffffffffff811115611c9457600080fd5b611ca085828601611b52565b95602094909401359450505050565b6000815180845260005b81811015611cd557602081850181015186830182015201611cb9565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b604081526000611d266040830185611caf565b905063ffffffff831660208301529392505050565b600060208284031215611d4d57600080fd5b6109e48261198e565b6020815260006109e46020830184611caf565b600060208284031215611d7b57600080fd5b813567ffffffffffffffff811115611d9257600080fd5b610ba184828501611b52565b600181811c90821680611db257607f821691505b60208210810361196b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e7a57611e7a611e1a565b5060010190565b604081526000611e946040830185611caf565b905060ff831660208301529392505050565b808201808211156109e7576109e7611e1a565b818103818111156109e7576109e7611e1a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600382810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000008112637fffffff821317156109e7576109e7611e1a565b604081526000611f506040830185611caf565b8281036020840152611f628185611caf565b95945050505050565b606081526000611f7e6060830186611caf565b8281036020840152611f908186611caf565b905082810360408401526113258185611caf565b600060208284031215611fb657600080fd5b815180151581146109e457600080fd5b600082611ffc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b80820281158282048414176109e7576109e7611e1a56fea2646970667358221220c3d5b08c6410542245f7d08e346f164421d4ab3cde6d3e994f2092fd1380f35c64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
