{
  "_format": "hh-sol-artifact-1",
  "contractName": "DNSRegistrar",
  "sourceName": "contracts/@ens/dnssec/DNSRegistrar.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract DNSSEC",
          "name": "_dnssec",
          "type": "address"
        },
        {
          "internalType": "contract PublicSuffixList",
          "name": "_suffixes",
          "type": "address"
        },
        {
          "internalType": "contract ENS",
          "name": "_ens",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "node",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "dnsname",
          "type": "bytes"
        }
      ],
      "name": "Claim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        }
      ],
      "name": "NewOracle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "suffixes",
          "type": "address"
        }
      ],
      "name": "NewPublicSuffixList",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ens",
      "outputs": [
        {
          "internalType": "contract ENS",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract DNSSEC",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature[]",
          "name": "input",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        }
      ],
      "name": "proveAndClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "name",
          "type": "bytes"
        },
        {
          "components": [
            {
              "internalType": "bytes",
              "name": "rrset",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "sig",
              "type": "bytes"
            }
          ],
          "internalType": "struct DNSSEC.RRSetWithSignature[]",
          "name": "input",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes",
          "name": "proof",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "resolver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "proveAndClaimWithResolver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract DNSSEC",
          "name": "_dnssec",
          "type": "address"
        }
      ],
      "name": "setOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract PublicSuffixList",
          "name": "_suffixes",
          "type": "address"
        }
      ],
      "name": "setPublicSuffixList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suffixes",
      "outputs": [
        {
          "internalType": "contract PublicSuffixList",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceID",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801562000010575f80fd5b5060405162001e1238038062001e12833981016040819052620000339162000115565b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e9060200160405180910390a1600280546001600160a01b0319166001600160a01b0384169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba89060200160405180910390a1600180546001600160a01b0319166001600160a01b039290921691909117905550620001669050565b6001600160a01b038116811462000112575f80fd5b50565b5f805f6060848603121562000128575f80fd5b83516200013581620000fd565b60208501519093506200014881620000fd565b60408501519092506200015b81620000fd565b809150509250925092565b611c9e80620001745f395ff3fe608060405234801561000f575f80fd5b5060043610610090575f3560e01c80633f15457f116100635780633f15457f1461010f5780637adbf973146101225780637dc0d1d0146101355780638bbedf7514610147578063be27b22c1461015a575f80fd5b806301ffc9a7146100945780631ecfc411146100bc578063224199c2146100d157806330349ebe146100e4575b5f80fd5b6100a76100a23660046115b1565b61016d565b60405190151581526020015b60405180910390f35b6100cf6100ca3660046115ef565b6101a3565b005b6100cf6100df3660046117e0565b6102de565b6002546100f7906001600160a01b031681565b6040516001600160a01b0390911681526020016100b3565b6001546100f7906001600160a01b031681565b6100cf6101303660046115ef565b61063c565b5f546100f7906001600160a01b031681565b6100cf610155366004611889565b61076d565b6100cf61016836600461190b565b6107f1565b5f6001600160e01b031982166301ffc9a760e01b148061019d57506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610271919061196b565b9050336001600160a01b03821614610287575f80fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061030f90879087906004016119d3565b5f604051808303815f875af115801561032a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103519190810190611a6b565b92505f805f610360888761088b565b91945092509050336001600160a01b038216146103da5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105bb576001600160a01b03851661044e5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103d1565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b1580156104ac575f80fd5b505af11580156104be573d5f803e3d5ffd5b505050505f83836040516020016104df929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b00906044015f604051808303815f87803b15801561053e575f80fd5b505af1158015610550573d5f803e3d5ffd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c391506044015f604051808303815f87803b15801561059f575f80fd5b505af11580156105b1573d5f803e3d5ffd5b5050505050610632565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b15801561061b575f80fd5b505af115801561062d573d5f803e3d5ffd5b505050505b5050505050505050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a7919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a919061196b565b9050336001600160a01b03821614610720575f80fd5b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102d1565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061079e90859085906004016119d3565b5f604051808303815f875af11580156107b9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107e09190810190611a6b565b90506107ec83826107f1565b505050565b5f805f6107fe858561088b565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303815f875af115801561085f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108839190611add565b505050505050565b5f8080806108998682610a40565b60ff1690506108aa86600183610a63565b92505f6108dc6108bb836001611b08565b6001848a516108ca9190611b1b565b6108d49190611b1b565b899190610a85565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061090d908490600401611b2e565b602060405180830381865afa158015610928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094c9190611b40565b6109a45760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103d1565b6109ae815f610b05565b5f549095506109c7906001600160a01b03168888610de3565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a2f9190611b2e565b60405180910390a350509250925092565b5f828281518110610a5357610a53611b5f565b016020015160f81c905092915050565b82515f90610a718385611b08565b1115610a7b575f80fd5b5091016020012090565b8251606090610a948385611b08565b1115610a9e575f80fd5b5f8267ffffffffffffffff811115610ab857610ab861160a565b6040519080825280601f01601f191660200182016040528015610ae2576020820181803683370190505b50905060208082019086860101610afa82828761100b565b509095945050505050565b5f80610b118484610a40565b60ff169050805f03610b2657505f905061019d565b5f610b4585610b358487611b08565b610b40906001611b08565b610b05565b90505f610b5e610b56866001611b08565b879085610a63565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095505f916001600160a01b03909116906302571be390602401602060405180830381865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb919061196b565b90506001600160a01b0381161580610c1b57506001600160a01b03811630145b610c7a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103d1565b6001600160a01b0381163014610dd95782610d5e576001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061196b565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec906044015f604051808303815f87803b158015610d42575f80fd5b505af1158015610d54573d5f803e3d5ffd5b5050505050610dd9565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303815f875af1158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190611add565b505b5050505092915050565b5f80610e016040518060400160405280606081526020015f81525090565b610e1985516005610e129190611b08565b8290611060565b50604080518082019091526005815264045f656e7360d81b6020820152610e419082906110c3565b50610e4c81866110c3565b50805160405163021e646f60e21b81525f9182916001600160a01b038a169163087991bc91610e8091601091600401611b73565b606060405180830381865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf9190611ba7565b93509150506bffffffffffffffffffffffff198216158015610ee057508551155b15610ef3575f8094509450505050611003565b855160208701206bffffffffffffffffffffffff19838116911614610f16575f80fd5b5f610f2187826110ef565b90505b80515160208201511015610ff857610f4b816080015183610f459190611bfc565b4261114a565b610fbd5760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103d1565b5f80610fcd898460a00151611162565b925090508115610fe857965060019550611003945050505050565b5050610ff3816111d1565b610f24565b505f80945094505050505b935093915050565b602081106110435781518352611022602084611b08565b925061102f602083611b08565b915061103c602082611b1b565b905061100b565b905182516020929092036101000a5f190180199091169116179052565b60408051808201909152606081525f602082015261107f602083611c20565b156110a75761108f602083611c20565b61109a906020611b1b565b6110a49083611b08565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526110e883845f0151518485516112b6565b9392505050565b6111376040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261019d816111d1565b5f806111568385611c3f565b60030b12159392505050565b5f805b83518310156111c4575f6111798585610a40565b60ff169050611189600185611b08565b93505f8061119887878561139c565b9250905081156111b0579350600192506111ca915050565b6111ba8387611b08565b9550505050611165565b505f9050805b9250929050565b60c081015160208201819052815151116111e85750565b5f6111fa825f015183602001516113f5565b82602001516112099190611b08565b82519091506112189082611454565b61ffff16604083015261122c600282611b08565b825190915061123b9082611454565b61ffff16606083015261124f600282611b08565b825190915061125e908261147a565b63ffffffff166080830152611274600482611b08565b82519091505f906112859083611454565b61ffff169050611296600283611b08565b60a0840181905291506112a98183611b08565b60c0909301929092525050565b60408051808201909152606081525f602082015282518211156112d7575f80fd5b60208501516112e68386611b08565b11156113195761131985611309876020015187866113049190611b08565b6114a2565b611314906002611c66565b6114b8565b5f808651805187602083010193508088870111156113375787860182525b505050602084015b602084106113775780518252611356602083611b08565b9150611363602082611b08565b9050611370602085611b1b565b935061133f565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f806113a8858561147a565b63ffffffff1663613d3078146113c257505f905080611003565b602c8310156113d557505f905080611003565b6113e9856113e4866004611b08565b6114d5565b91509150935093915050565b5f815b8351811061140857611408611c7d565b5f6114138583610a40565b60ff169050611423816001611b08565b61142d9083611b08565b9150805f0361143c5750611442565b506113f8565b61144c8382611b1b565b949350505050565b81515f90611463836002611b08565b111561146d575f80fd5b50016002015161ffff1690565b81515f90611489836004611b08565b1115611493575f80fd5b50016004015163ffffffff1690565b5f818311156114b257508161019d565b50919050565b81516114c48383611060565b506114cf83826110c3565b50505050565b5f8060288385516114e69190611b1b565b10156114f657505f9050806111ca565b5f835b611504856028611b08565b8110156115a55760049190911b905f61151d8783610a40565b60ff169050603081101580156115335750603a81105b1561154c57611543603082611b1b565b8317925061159c565b6041811015801561155d5750604781105b1561156d57611543603782611b1b565b6061811015801561157e5750606781105b1561158e57611543605782611b1b565b5f80945094505050506111ca565b506001016114f9565b50946001945092505050565b5f602082840312156115c1575f80fd5b81356001600160e01b0319811681146110e8575f80fd5b6001600160a01b03811681146115ec575f80fd5b50565b5f602082840312156115ff575f80fd5b81356110e8816115d8565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156116415761164161160a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116705761167061160a565b604052919050565b5f67ffffffffffffffff8211156116915761169161160a565b50601f01601f191660200190565b5f82601f8301126116ae575f80fd5b81356116c16116bc82611678565b611647565b8181528460208386010111156116d5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112611700575f80fd5b8135602067ffffffffffffffff8083111561171d5761171d61160a565b8260051b61172c838201611647565b9384528581018301938381019088861115611745575f80fd5b84880192505b858310156117d457823584811115611761575f80fd5b88016040818b03601f1901811315611777575f80fd5b61177f61161e565b878301358781111561178f575f80fd5b61179d8d8a8387010161169f565b8252509082013590868211156117b1575f80fd5b6117bf8c898486010161169f565b8189015284525050918401919084019061174b565b98975050505050505050565b5f805f805f60a086880312156117f4575f80fd5b853567ffffffffffffffff8082111561180b575f80fd5b61181789838a0161169f565b9650602088013591508082111561182c575f80fd5b61183889838a016116f1565b9550604088013591508082111561184d575f80fd5b5061185a8882890161169f565b935050606086013561186b816115d8565b9150608086013561187b816115d8565b809150509295509295909350565b5f805f6060848603121561189b575f80fd5b833567ffffffffffffffff808211156118b2575f80fd5b6118be8783880161169f565b945060208601359150808211156118d3575f80fd5b6118df878388016116f1565b935060408601359150808211156118f4575f80fd5b506119018682870161169f565b9150509250925092565b5f806040838503121561191c575f80fd5b823567ffffffffffffffff80821115611933575f80fd5b61193f8683870161169f565b93506020850135915080821115611954575f80fd5b506119618582860161169f565b9150509250929050565b5f6020828403121561197b575f80fd5b81516110e8816115d8565b5f5b838110156119a0578181015183820152602001611988565b50505f910152565b5f81518084526119bf816020860160208601611986565b601f01601f19169290920160200192915050565b5f60408083016040845280865180835260608601915060608160051b870101925060208089015f5b83811015611a4b57888603605f1901855281518051888852611a1f898901826119a8565b9185015188830389870152919050611a3781836119a8565b9750505093820193908201906001016119fb565b505086840381880152505050611a6181866119a8565b9695505050505050565b5f60208284031215611a7b575f80fd5b815167ffffffffffffffff811115611a91575f80fd5b8201601f81018413611aa1575f80fd5b8051611aaf6116bc82611678565b818152856020838501011115611ac3575f80fd5b611ad4826020830160208601611986565b95945050505050565b5f60208284031215611aed575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561019d5761019d611af4565b8181038181111561019d5761019d611af4565b602081525f6110e860208301846119a8565b5f60208284031215611b50575f80fd5b815180151581146110e8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b61ffff83168152604060208201525f61144c60408301846119a8565b805163ffffffff81168114611ba2575f80fd5b919050565b5f805f60608486031215611bb9575f80fd5b611bc284611b8f565b9250611bd060208501611b8f565b915060408401516bffffffffffffffffffffffff1981168114611bf1575f80fd5b809150509250925092565b63ffffffff818116838216019080821115611c1957611c19611af4565b5092915050565b5f82611c3a57634e487b7160e01b5f52601260045260245ffd5b500690565b600382810b9082900b03637fffffff198112637fffffff8213171561019d5761019d611af4565b808202811582820484141761019d5761019d611af4565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a",
  "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c80633f15457f116100635780633f15457f1461010f5780637adbf973146101225780637dc0d1d0146101355780638bbedf7514610147578063be27b22c1461015a575f80fd5b806301ffc9a7146100945780631ecfc411146100bc578063224199c2146100d157806330349ebe146100e4575b5f80fd5b6100a76100a23660046115b1565b61016d565b60405190151581526020015b60405180910390f35b6100cf6100ca3660046115ef565b6101a3565b005b6100cf6100df3660046117e0565b6102de565b6002546100f7906001600160a01b031681565b6040516001600160a01b0390911681526020016100b3565b6001546100f7906001600160a01b031681565b6100cf6101303660046115ef565b61063c565b5f546100f7906001600160a01b031681565b6100cf610155366004611889565b61076d565b6100cf61016836600461190b565b6107f1565b5f6001600160e01b031982166301ffc9a760e01b148061019d57506001600160e01b031982166317d8f49b60e01b145b92915050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610271919061196b565b9050336001600160a01b03821614610287575f80fd5b600280546001600160a01b0319166001600160a01b0385169081179091556040519081527f9176b7f47e4504df5e5516c99d90d82ac7cbd49cc77e7f22ba2ac2f2e3a3eba8906020015b60405180910390a1505050565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061030f90879087906004016119d3565b5f604051808303815f875af115801561032a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103519190810190611a6b565b92505f805f610360888761088b565b91945092509050336001600160a01b038216146103da5760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c79206f776e65722063616e2063616c6c2070726f7665416e64436c616960448201526c36abb4ba342932b9b7b63b32b960991b60648201526084015b60405180910390fd5b6001600160a01b038416156105bb576001600160a01b03851661044e5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f74207365742061646472206966207265736f6c766572206973206e6044820152651bdd081cd95d60d21b60648201526084016103d1565b6001546040516305ef2c7f60e41b815260048101859052602481018490523060448201526001600160a01b0387811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b1580156104ac575f80fd5b505af11580156104be573d5f803e3d5ffd5b505050505f83836040516020016104df929190918252602082015260400190565b60408051808303601f1901815290829052805160209091012062d5fa2b60e81b8252600482018190526001600160a01b03878116602484015290925087169063d5fa2b00906044015f604051808303815f87803b15801561053e575f80fd5b505af1158015610550573d5f803e3d5ffd5b5050600154604051635b0fc9c360e01b8152600481018590526001600160a01b0386811660248301529091169250635b0fc9c391506044015f604051808303815f87803b15801561059f575f80fd5b505af11580156105b1573d5f803e3d5ffd5b5050505050610632565b6001546040516305ef2c7f60e41b815260048101859052602481018490526001600160a01b03838116604483015287811660648301525f608483015290911690635ef2c7f09060a4015f604051808303815f87803b15801561061b575f80fd5b505af115801561062d573d5f803e3d5ffd5b505050505b5050505050505050565b6001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610683573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a7919061196b565b90505f816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070a919061196b565b9050336001600160a01b03821614610720575f80fd5b5f80546001600160a01b0319166001600160a01b0385169081179091556040519081527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e906020016102d1565b5f546040516321ae60b160e11b81526001600160a01b039091169063435cc1629061079e90859085906004016119d3565b5f604051808303815f875af11580156107b9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107e09190810190611a6b565b90506107ec83826107f1565b505050565b5f805f6107fe858561088b565b6001546040516306ab592360e01b815260048101859052602481018490526001600160a01b03808416604483015294975092955090935091909116906306ab5923906064016020604051808303815f875af115801561085f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108839190611add565b505050505050565b5f8080806108998682610a40565b60ff1690506108aa86600183610a63565b92505f6108dc6108bb836001611b08565b6001848a516108ca9190611b1b565b6108d49190611b1b565b899190610a85565b6002546040516327c482cf60e11b81529192506001600160a01b031690634f89059e9061090d908490600401611b2e565b602060405180830381865afa158015610928573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094c9190611b40565b6109a45760405162461bcd60e51b815260206004820152602360248201527f506172656e74206e616d65206d7573742062652061207075626c6963207375666044820152620ccd2f60eb1b60648201526084016103d1565b6109ae815f610b05565b5f549095506109c7906001600160a01b03168888610de3565b5060408051602081018890529081018690529093506001600160a01b03841690606001604051602081830303815290604052805190602001207fa2e66ce20e6fb2c4f61339c364ad79f15160cf5307230c8bc4d628adbca2ba3989604051610a2f9190611b2e565b60405180910390a350509250925092565b5f828281518110610a5357610a53611b5f565b016020015160f81c905092915050565b82515f90610a718385611b08565b1115610a7b575f80fd5b5091016020012090565b8251606090610a948385611b08565b1115610a9e575f80fd5b5f8267ffffffffffffffff811115610ab857610ab861160a565b6040519080825280601f01601f191660200182016040528015610ae2576020820181803683370190505b50905060208082019086860101610afa82828761100b565b509095945050505050565b5f80610b118484610a40565b60ff169050805f03610b2657505f905061019d565b5f610b4585610b358487611b08565b610b40906001611b08565b610b05565b90505f610b5e610b56866001611b08565b879085610a63565b604080516020810185905290810182905290915060600160408051808303601f190181529082905280516020909101206001546302571be360e01b8352600483018290529095505f916001600160a01b03909116906302571be390602401602060405180830381865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb919061196b565b90506001600160a01b0381161580610c1b57506001600160a01b03811630145b610c7a5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420656e61626c652061206e616d65206f776e656420627920736f6044820152696d656f6e6520656c736560b01b60648201526084016103d1565b6001600160a01b0381163014610dd95782610d5e576001546040516302571be360e01b81525f60048201819052916001600160a01b0316906302571be390602401602060405180830381865afa158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061196b565b60405163232e3b3b60e21b8152600481018590523060248201529091506001600160a01b03821690638cb8ecec906044015f604051808303815f87803b158015610d42575f80fd5b505af1158015610d54573d5f803e3d5ffd5b5050505050610dd9565b6001546040516306ab592360e01b815260048101859052602481018490523060448201526001600160a01b03909116906306ab5923906064016020604051808303815f875af1158015610db3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd79190611add565b505b5050505092915050565b5f80610e016040518060400160405280606081526020015f81525090565b610e1985516005610e129190611b08565b8290611060565b50604080518082019091526005815264045f656e7360d81b6020820152610e419082906110c3565b50610e4c81866110c3565b50805160405163021e646f60e21b81525f9182916001600160a01b038a169163087991bc91610e8091601091600401611b73565b606060405180830381865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf9190611ba7565b93509150506bffffffffffffffffffffffff198216158015610ee057508551155b15610ef3575f8094509450505050611003565b855160208701206bffffffffffffffffffffffff19838116911614610f16575f80fd5b5f610f2187826110ef565b90505b80515160208201511015610ff857610f4b816080015183610f459190611bfc565b4261114a565b610fbd5760405162461bcd60e51b815260206004820152603c60248201527f444e53207265636f7264206973207374616c653b2072656672657368206f722060448201527f64656c657465206974206265666f72652070726f63656564696e672e0000000060648201526084016103d1565b5f80610fcd898460a00151611162565b925090508115610fe857965060019550611003945050505050565b5050610ff3816111d1565b610f24565b505f80945094505050505b935093915050565b602081106110435781518352611022602084611b08565b925061102f602083611b08565b915061103c602082611b1b565b905061100b565b905182516020929092036101000a5f190180199091169116179052565b60408051808201909152606081525f602082015261107f602083611c20565b156110a75761108f602083611c20565b61109a906020611b1b565b6110a49083611b08565b91505b506020828101829052604080518085525f815290920101905290565b60408051808201909152606081525f60208201526110e883845f0151518485516112b6565b9392505050565b6111376040518060e00160405280606081526020015f81526020015f61ffff1681526020015f61ffff1681526020015f63ffffffff1681526020015f81526020015f81525090565b82815260c0810182905261019d816111d1565b5f806111568385611c3f565b60030b12159392505050565b5f805b83518310156111c4575f6111798585610a40565b60ff169050611189600185611b08565b93505f8061119887878561139c565b9250905081156111b0579350600192506111ca915050565b6111ba8387611b08565b9550505050611165565b505f9050805b9250929050565b60c081015160208201819052815151116111e85750565b5f6111fa825f015183602001516113f5565b82602001516112099190611b08565b82519091506112189082611454565b61ffff16604083015261122c600282611b08565b825190915061123b9082611454565b61ffff16606083015261124f600282611b08565b825190915061125e908261147a565b63ffffffff166080830152611274600482611b08565b82519091505f906112859083611454565b61ffff169050611296600283611b08565b60a0840181905291506112a98183611b08565b60c0909301929092525050565b60408051808201909152606081525f602082015282518211156112d7575f80fd5b60208501516112e68386611b08565b11156113195761131985611309876020015187866113049190611b08565b6114a2565b611314906002611c66565b6114b8565b5f808651805187602083010193508088870111156113375787860182525b505050602084015b602084106113775780518252611356602083611b08565b9150611363602082611b08565b9050611370602085611b1b565b935061133f565b5181515f1960208690036101000a019081169019919091161790525083949350505050565b5f806113a8858561147a565b63ffffffff1663613d3078146113c257505f905080611003565b602c8310156113d557505f905080611003565b6113e9856113e4866004611b08565b6114d5565b91509150935093915050565b5f815b8351811061140857611408611c7d565b5f6114138583610a40565b60ff169050611423816001611b08565b61142d9083611b08565b9150805f0361143c5750611442565b506113f8565b61144c8382611b1b565b949350505050565b81515f90611463836002611b08565b111561146d575f80fd5b50016002015161ffff1690565b81515f90611489836004611b08565b1115611493575f80fd5b50016004015163ffffffff1690565b5f818311156114b257508161019d565b50919050565b81516114c48383611060565b506114cf83826110c3565b50505050565b5f8060288385516114e69190611b1b565b10156114f657505f9050806111ca565b5f835b611504856028611b08565b8110156115a55760049190911b905f61151d8783610a40565b60ff169050603081101580156115335750603a81105b1561154c57611543603082611b1b565b8317925061159c565b6041811015801561155d5750604781105b1561156d57611543603782611b1b565b6061811015801561157e5750606781105b1561158e57611543605782611b1b565b5f80945094505050506111ca565b506001016114f9565b50946001945092505050565b5f602082840312156115c1575f80fd5b81356001600160e01b0319811681146110e8575f80fd5b6001600160a01b03811681146115ec575f80fd5b50565b5f602082840312156115ff575f80fd5b81356110e8816115d8565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff811182821017156116415761164161160a565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156116705761167061160a565b604052919050565b5f67ffffffffffffffff8211156116915761169161160a565b50601f01601f191660200190565b5f82601f8301126116ae575f80fd5b81356116c16116bc82611678565b611647565b8181528460208386010111156116d5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112611700575f80fd5b8135602067ffffffffffffffff8083111561171d5761171d61160a565b8260051b61172c838201611647565b9384528581018301938381019088861115611745575f80fd5b84880192505b858310156117d457823584811115611761575f80fd5b88016040818b03601f1901811315611777575f80fd5b61177f61161e565b878301358781111561178f575f80fd5b61179d8d8a8387010161169f565b8252509082013590868211156117b1575f80fd5b6117bf8c898486010161169f565b8189015284525050918401919084019061174b565b98975050505050505050565b5f805f805f60a086880312156117f4575f80fd5b853567ffffffffffffffff8082111561180b575f80fd5b61181789838a0161169f565b9650602088013591508082111561182c575f80fd5b61183889838a016116f1565b9550604088013591508082111561184d575f80fd5b5061185a8882890161169f565b935050606086013561186b816115d8565b9150608086013561187b816115d8565b809150509295509295909350565b5f805f6060848603121561189b575f80fd5b833567ffffffffffffffff808211156118b2575f80fd5b6118be8783880161169f565b945060208601359150808211156118d3575f80fd5b6118df878388016116f1565b935060408601359150808211156118f4575f80fd5b506119018682870161169f565b9150509250925092565b5f806040838503121561191c575f80fd5b823567ffffffffffffffff80821115611933575f80fd5b61193f8683870161169f565b93506020850135915080821115611954575f80fd5b506119618582860161169f565b9150509250929050565b5f6020828403121561197b575f80fd5b81516110e8816115d8565b5f5b838110156119a0578181015183820152602001611988565b50505f910152565b5f81518084526119bf816020860160208601611986565b601f01601f19169290920160200192915050565b5f60408083016040845280865180835260608601915060608160051b870101925060208089015f5b83811015611a4b57888603605f1901855281518051888852611a1f898901826119a8565b9185015188830389870152919050611a3781836119a8565b9750505093820193908201906001016119fb565b505086840381880152505050611a6181866119a8565b9695505050505050565b5f60208284031215611a7b575f80fd5b815167ffffffffffffffff811115611a91575f80fd5b8201601f81018413611aa1575f80fd5b8051611aaf6116bc82611678565b818152856020838501011115611ac3575f80fd5b611ad4826020830160208601611986565b95945050505050565b5f60208284031215611aed575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561019d5761019d611af4565b8181038181111561019d5761019d611af4565b602081525f6110e860208301846119a8565b5f60208284031215611b50575f80fd5b815180151581146110e8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b61ffff83168152604060208201525f61144c60408301846119a8565b805163ffffffff81168114611ba2575f80fd5b919050565b5f805f60608486031215611bb9575f80fd5b611bc284611b8f565b9250611bd060208501611b8f565b915060408401516bffffffffffffffffffffffff1981168114611bf1575f80fd5b809150509250925092565b63ffffffff818116838216019080821115611c1957611c19611af4565b5092915050565b5f82611c3a57634e487b7160e01b5f52601260045260245ffd5b500690565b600382810b9082900b03637fffffff198112637fffffff8213171561019d5761019d611af4565b808202811582820484141761019d5761019d611af4565b634e487b7160e01b5f52600160045260245ffdfea164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
