{
  "_format": "hh-sol-artifact-1",
  "contractName": "StatefulChainlinkOracle",
  "sourceName": "solidity/contracts/StatefulChainlinkOracle.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract FeedRegistryInterface",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_superAdmin",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_initialAdmins",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidMappingsInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidPrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LastUpdateIsTooOld",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "PairCannotBeSupported",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "PairNotSupportedYet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "mappings",
          "type": "address[]"
        }
      ],
      "name": "MappingsAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "TokensConsideredUSD",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "TokensNoLongerConsideredUSD",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum IStatefulChainlinkOracle.PricingPlan",
          "name": "plan",
          "type": "uint8"
        }
      ],
      "name": "UpdatedPlanForPair",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_DELAY",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUPER_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_addresses",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "_mappings",
          "type": "address[]"
        }
      ],
      "name": "addMappings",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "addOrModifySupportForPair",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "addSupportForPairIfNeeded",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "canSupportPair",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "isPairAlreadySupported",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "mappedToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "planForPair",
      "outputs": [
        {
          "internalType": "enum IStatefulChainlinkOracle.PricingPlan",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountIn",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_tokenOut",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract FeedRegistryInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002caa38038062002caa833981016040819052620000349162000283565b6001600160a01b03831615806200005257506001600160a01b038216155b15620000715760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0383166080526200009960008051602062002c6a8339815191528062000147565b620000c360008051602062002c8a83398151915260008051602062002c6a83398151915262000147565b620000de60008051602062002c6a8339815191528362000192565b60005b81518110156200013d576200012860008051602062002c8a83398151915283838151811062000114576200011462000383565b60200260200101516200019260201b60201c565b80620001348162000399565b915050620000e1565b50505050620003c1565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200019e8282620001a2565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200019e576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001fe3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b03811681146200025857600080fd5b50565b8051620002688162000242565b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200029957600080fd5b8351620002a68162000242565b80935050602080850151620002bb8162000242565b60408601519093506001600160401b0380821115620002d957600080fd5b818701915087601f830112620002ee57600080fd5b8151818111156200030357620003036200026d565b8060051b604051601f19603f830116810181811085821117156200032b576200032b6200026d565b60405291825284820192508381018501918a8311156200034a57600080fd5b938501935b82851015620003735762000363856200025b565b845293850193928501926200034f565b8096505050505050509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201620003ba57634e487b7160e01b600052601160045260246000fd5b5060010190565b60805161287f620003eb600039600081816102c2015281816117ed0152611b16015261287f6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80637b103999116100cd578063d08a8a1911610081578063d547741f11610066578063d547741f14610389578063dd7de37e1461039c578063e82138cd146103af57600080fd5b8063d08a8a1914610363578063d0a26eb31461037657600080fd5b80639363edd6116100b25780639363edd614610328578063a217fddf1461033b578063ac9650d81461034357600080fd5b80637b103999146102bd57806391d14854146102e457600080fd5b80634125ff90116101245780634df3cad6116101095780634df3cad61461024b578063734273fd1461028357806375b238fc1461029657600080fd5b80634125ff90146102055780634460bdd61461022457600080fd5b8063248a9ca311610155578063248a9ca3146101ae5780632f2ff15d146101df57806336568abe146101f257600080fd5b806301ffc9a7146101715780631d4ef30a14610199575b600080fd5b61018461017f366004611ea7565b6103cf565b60405190151581526020015b60405180910390f35b6101ac6101a7366004611f2e565b61043a565b005b6101d16101bc366004611f9a565b60009081526020819052604090206001015490565b604051908152602001610190565b6101ac6101ed366004611fd7565b6105a7565b6101ac610200366004611fd7565b6105d1565b61020f6201518081565b60405163ffffffff9091168152602001610190565b6101d17f7613a25ecc738585a232ad50a301178f12b3ba8887d13e138b523c4269c4768981565b61025e610259366004611ffa565b610689565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b610184610291366004612015565b6106c7565b6101d17fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b6101846102f2366004611fd7565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610184610336366004612015565b610708565b6101d1600081565b61035661035136600461203f565b61072f565b60405161019091906120ef565b6101d16103713660046121b1565b610824565b6101ac610384366004612220565b610977565b6101ac610397366004611fd7565b610997565b6101ac6103aa366004612220565b6109bc565b6103c26103bd366004612015565b6109c8565b60405161019091906122df565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f82a9c718000000000000000000000000000000000000000000000000000000001480610425575061042582610a5e565b80610434575061043482610af5565b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561046481610b97565b83821461049d576040517f0dc7722a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b84811015610562578383828181106104ba576104ba6122ed565b90506020020160208101906104cf9190611ffa565b600160008888858181106104e5576104e56122ed565b90506020020160208101906104fa9190611ffa565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160002080547fffffffffffffffffffffffff000000000000000000000000000000000000000016929091169190911790558061055a8161234b565b9150506104a0565b507f25967af46669513d9b32b10bce9dc8b094f9638e01d68bd4253fb634873b3d178585858560405161059894939291906123b9565b60405180910390a15050505050565b6000828152602081905260409020600101546105c281610b97565b6105cc8383610ba4565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6106858282610c94565b5050565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260016020526040812054909116806106be57826106c0565b805b9392505050565b60008060006106d68585610d4b565b9150915060006106e68383610d77565b905060008160088111156106fc576106fc612275565b14159695505050505050565b60008061071584846109c8565b600881111561072657610726612275565b14159392505050565b60608167ffffffffffffffff81111561074a5761074a6123eb565b60405190808252806020026020018201604052801561077d57816020015b60608152602001906001900390816107685790505b50905060005b8281101561081d576107ed308585848181106107a1576107a16122ed565b90506020028101906107b3919061241a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed192505050565b8282815181106107ff576107ff6122ed565b602002602001018190525080806108159061234b565b915050610783565b5092915050565b60008060006108338887610ef6565b915091506000600260006108478585610f16565b8152602081019190915260400160009081205460ff16915081600881111561087157610871612275565b036108c8576040517f75fcccb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808b16600483015288166024820152604401610672565b60088160088111156108dc576108dc612275565b036108ec5787935050505061096e565b60006108f78a610f86565b9050600061090489610f86565b9050600383600881111561091a5761091a612275565b116109395761092d858584848e88611062565b9550505050505061096e565b600583600881111561094d5761094d612275565b116109605761092d858584848e8861122a565b61092d858584848e886112b2565b95945050505050565b6109818484610708565b610991576109918484848461141d565b50505050565b6000828152602081905260409020600101546109b281610b97565b6105cc8383610c94565b6109918484848461141d565b60008060006109d78585610d4b565b9150915060026000610a4184846040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b815260208101919091526040016000205460ff1695945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061043457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610434565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3d7499ff000000000000000000000000000000000000000000000000000000001480610b8857507fffffffff0000000000000000000000000000000000000000000000000000000082167fac9650d800000000000000000000000000000000000000000000000000000000145b80610434575061043482610a5e565b610ba181336115cc565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166106855760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c363390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156106855760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080600080610d5b8686610ef6565b91509150610d69828261169c565b9350935050505b9250929050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610db457506008610434565b73ffffffffffffffffffffffffffffffffffffffff8381166103488181149285169081149173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9081149114818015610dfd5750825b80610e0d5750838015610e0d5750805b15610e1f576001945050505050610434565b8215610e3d57610e3287600260076116e7565b945050505050610434565b8315610e5057610e3286600260066116e7565b8015610e6357610e3287600660036116e7565b8115610e7657610e3286600760036116e7565b610e828761034861179d565b15610e9457610e3286600460066116e7565b610eb28773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61179d565b15610ec457610e3286600760056116e7565b5060009695505050505050565b60606106c083836040518060600160405280602781526020016128236027913961188c565b600080610f0284610689565b9150610f0d83610689565b90509250929050565b6000806000610f25858561169c565b60408051606084811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529185901b1660348301528251602881840301815260489092019092528051910120919350915061096e565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831603610fc157506012919050565b73ffffffffffffffffffffffffffffffffffffffff82163b610fe557506008919050565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611030573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611054919061247f565b60ff1692915050565b919050565b60008080600384600881111561107a5761107a612275565b14611086576008611089565b60125b9050600061034873ffffffffffffffffffffffffffffffffffffffff8b1614806110f8575060038560088111156110c2576110c2612275565b1480156110f8575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b16145b9050600185600881111561110e5761110e612275565b036111225761111b6119aa565b92506111c5565b600285600881111561113657611136612275565b036111695761111b61034873ffffffffffffffffffffffffffffffffffffffff8b161461116357896119d1565b8a6119d1565b600385600881111561117d5761117d612275565b036111c5576111c273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b16146111bc5789611a0e565b8a611a0e565b92505b80611202576111f86111d787856124a2565b896111e6600086900b8b6124c1565b6111f091906124c1565b60010b611a6e565b9350505050611220565b82611216878a6111e68b600088900b612501565b6111f89190612541565b9695505050505050565b600080600483600881111561124157611241612275565b146112605773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611264565b6103485b905060006112728983611ac2565b905060006112808984611ac2565b90508061129a61129084896124a2565b6111f08b8b6124c1565b6112a49190612541565b9a9950505050505050505050565b60008060068360088111156112c9576112c9612275565b14801561130157508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16105b806113535750600783600881111561131b5761131b612275565b14801561135357508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16115b9050600061135f6119aa565b905081156113c95760006113728a6119d1565b9050600061137f8a611a0e565b905060006113a6611390848a6124a2565b601261139c8d8d6124c1565b6111f09190612501565b9050816113b38583612541565b6113bd9190612541565b95505050505050611220565b60006113d48a611a0e565b905060006113e18a6119d1565b905080611408846113f2858b6124a2565b6113fc91906124a2565b60126111e68d8d6124c1565b6114129190612541565b945050505050611220565b60008061142a8686610d4b565b91509150600061143a8383610d77565b905060006114a084846040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b905060008260088111156114b6576114b6612275565b036115395760008181526002602052604081205460ff16908160088111156114e0576114e0612275565b03611537576040517f2eb4e23d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808b16600483015289166024820152604401610672565b505b600081815260026020526040902080548391907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600881111561158257611582612275565b02179055507f0a30db570583b15d0181da1cbe1212a5753bf36bfeaee751c83ea728df912a938484846040516115ba9392919061257c565b60405180910390a15050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610685576116228173ffffffffffffffffffffffffffffffffffffffff166014611c11565b61162d836020611c11565b60405160200161163e9291906125b6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261067291600401612637565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106116d95782846116dc565b83835b909590945092505050565b600080600080600085600881111561170157611701612275565b87600881111561171357611713612275565b106117375773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8661034889611752565b6103488773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee885b9350935093509350611764888561179d565b1561177557829450505050506106c0565b61177f888361179d565b1561178f5793506106c092505050565b506000979650505050505050565b6040517fbcfd032d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bcfd032d9060440160a060405180830381865afa925050508015611870575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261186d91810190612664565b60015b61187c57506000610434565b6000841395505050505050610434565b606073ffffffffffffffffffffffffffffffffffffffff84163b611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610672565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161195a91906126b4565b600060405180830381855af49150503d8060008114611995576040519150601f19603f3d011682016040523d82523d6000602084013e61199a565b606091505b5091509150611220828286611e54565b60006119cc73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610348611ac2565b905090565b600061034873ffffffffffffffffffffffffffffffffffffffff831614611a03576119fe82610348611ac2565b610434565b6305f5e10092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614611a5f576119fe8273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611ac2565b670de0b6b3a764000092915050565b600081600003611a7f575081610434565b6000821215611aad57611a91826126d0565b611a9c90600a6127ec565b611aa69084612541565b9050610434565b611ab882600a6127ec565b611aa690846124a2565b6040517fbcfd032d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528281166024830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063bcfd032d9060440160a060405180830381865afa158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b839190612664565b5093505092505060008213611bc3576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd062015180826127f8565b421115611c09576040517f46ea729300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b60606000611c208360026124a2565b611c2b9060026127f8565b67ffffffffffffffff811115611c4357611c436123eb565b6040519080825280601f01601f191660200182016040528015611c6d576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611ca457611ca46122ed565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d0757611d076122ed565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611d438460026124a2565b611d4e9060016127f8565b90505b6001811115611deb577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611d8f57611d8f6122ed565b1a60f81b828281518110611da557611da56122ed565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611de48161280b565b9050611d51565b5083156106c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610672565b60608315611e635750816106c0565b825115611e735782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106729190612637565b600060208284031215611eb957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146106c057600080fd5b60008083601f840112611efb57600080fd5b50813567ffffffffffffffff811115611f1357600080fd5b6020830191508360208260051b8501011115610d7057600080fd5b60008060008060408587031215611f4457600080fd5b843567ffffffffffffffff80821115611f5c57600080fd5b611f6888838901611ee9565b90965094506020870135915080821115611f8157600080fd5b50611f8e87828801611ee9565b95989497509550505050565b600060208284031215611fac57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461105d57600080fd5b60008060408385031215611fea57600080fd5b82359150610f0d60208401611fb3565b60006020828403121561200c57600080fd5b6106c082611fb3565b6000806040838503121561202857600080fd5b61203183611fb3565b9150610f0d60208401611fb3565b6000806020838503121561205257600080fd5b823567ffffffffffffffff81111561206957600080fd5b61207585828601611ee9565b90969095509350505050565b60005b8381101561209c578181015183820152602001612084565b50506000910152565b600081518084526120bd816020860160208601612081565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612162577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526121508583516120a5565b94509285019290850190600101612116565b5092979650505050505050565b60008083601f84011261218157600080fd5b50813567ffffffffffffffff81111561219957600080fd5b602083019150836020828501011115610d7057600080fd5b6000806000806000608086880312156121c957600080fd5b6121d286611fb3565b9450602086013593506121e760408701611fb3565b9250606086013567ffffffffffffffff81111561220357600080fd5b61220f8882890161216f565b969995985093965092949392505050565b6000806000806060858703121561223657600080fd5b61223f85611fb3565b935061224d60208601611fb3565b9250604085013567ffffffffffffffff81111561226957600080fd5b611f8e8782880161216f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600981106122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810161043482846122a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000600019820361235e5761235e61231c565b5060010190565b8183526000602080850194508260005b858110156123ae5773ffffffffffffffffffffffffffffffffffffffff61239b83611fb3565b1687529582019590820190600101612375565b509495945050505050565b6040815260006123cd604083018688612365565b82810360208401526123e0818587612365565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261244f57600080fd5b83018035915067ffffffffffffffff82111561246a57600080fd5b602001915036819003821315610d7057600080fd5b60006020828403121561249157600080fd5b815160ff811681146106c057600080fd5b60008160001904831182151516156124bc576124bc61231c565b500290565b600182810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80008112617fff821317156104345761043461231c565b600181810b9083900b01617fff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000821217156104345761043461231c565b600082612577577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff848116825283166020820152606081016125ae60408301846122a4565b949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516125ee816017850160208801612081565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161262b816028840160208801612081565b01602801949350505050565b6020815260006106c060208301846120a5565b805169ffffffffffffffffffff8116811461105d57600080fd5b600080600080600060a0868803121561267c57600080fd5b6126858661264a565b94506020860151935060408601519250606086015191506126a86080870161264a565b90509295509295909350565b600082516126c6818460208701612081565b9190910192915050565b60007f800000000000000000000000000000000000000000000000000000000000000082036127015761270161231c565b5060000390565b600181815b808511156127435781600019048211156127295761272961231c565b8085161561273657918102915b93841c939080029061270d565b509250929050565b60008261275a57506001610434565b8161276757506000610434565b816001811461277d5760028114612787576127a3565b6001915050610434565b60ff8411156127985761279861231c565b50506001821b610434565b5060208310610133831016604e8410600b84101617156127c6575081810a610434565b6127d08383612708565b80600019048211156127e4576127e461231c565b029392505050565b60006106c0838361274b565b808201808211156104345761043461231c565b60008161281a5761281a61231c565b50600019019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122050d5cc1e245021db9d6adf9064580ed173acfae28ba9ff93d00846b8e30e5ac664736f6c634300081000337613a25ecc738585a232ad50a301178f12b3ba8887d13e138b523c4269c47689a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80637b103999116100cd578063d08a8a1911610081578063d547741f11610066578063d547741f14610389578063dd7de37e1461039c578063e82138cd146103af57600080fd5b8063d08a8a1914610363578063d0a26eb31461037657600080fd5b80639363edd6116100b25780639363edd614610328578063a217fddf1461033b578063ac9650d81461034357600080fd5b80637b103999146102bd57806391d14854146102e457600080fd5b80634125ff90116101245780634df3cad6116101095780634df3cad61461024b578063734273fd1461028357806375b238fc1461029657600080fd5b80634125ff90146102055780634460bdd61461022457600080fd5b8063248a9ca311610155578063248a9ca3146101ae5780632f2ff15d146101df57806336568abe146101f257600080fd5b806301ffc9a7146101715780631d4ef30a14610199575b600080fd5b61018461017f366004611ea7565b6103cf565b60405190151581526020015b60405180910390f35b6101ac6101a7366004611f2e565b61043a565b005b6101d16101bc366004611f9a565b60009081526020819052604090206001015490565b604051908152602001610190565b6101ac6101ed366004611fd7565b6105a7565b6101ac610200366004611fd7565b6105d1565b61020f6201518081565b60405163ffffffff9091168152602001610190565b6101d17f7613a25ecc738585a232ad50a301178f12b3ba8887d13e138b523c4269c4768981565b61025e610259366004611ffa565b610689565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b610184610291366004612015565b6106c7565b6101d17fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b6101846102f2366004611fd7565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610184610336366004612015565b610708565b6101d1600081565b61035661035136600461203f565b61072f565b60405161019091906120ef565b6101d16103713660046121b1565b610824565b6101ac610384366004612220565b610977565b6101ac610397366004611fd7565b610997565b6101ac6103aa366004612220565b6109bc565b6103c26103bd366004612015565b6109c8565b60405161019091906122df565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f82a9c718000000000000000000000000000000000000000000000000000000001480610425575061042582610a5e565b80610434575061043482610af5565b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561046481610b97565b83821461049d576040517f0dc7722a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b84811015610562578383828181106104ba576104ba6122ed565b90506020020160208101906104cf9190611ffa565b600160008888858181106104e5576104e56122ed565b90506020020160208101906104fa9190611ffa565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160002080547fffffffffffffffffffffffff000000000000000000000000000000000000000016929091169190911790558061055a8161234b565b9150506104a0565b507f25967af46669513d9b32b10bce9dc8b094f9638e01d68bd4253fb634873b3d178585858560405161059894939291906123b9565b60405180910390a15050505050565b6000828152602081905260409020600101546105c281610b97565b6105cc8383610ba4565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6106858282610c94565b5050565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260016020526040812054909116806106be57826106c0565b805b9392505050565b60008060006106d68585610d4b565b9150915060006106e68383610d77565b905060008160088111156106fc576106fc612275565b14159695505050505050565b60008061071584846109c8565b600881111561072657610726612275565b14159392505050565b60608167ffffffffffffffff81111561074a5761074a6123eb565b60405190808252806020026020018201604052801561077d57816020015b60608152602001906001900390816107685790505b50905060005b8281101561081d576107ed308585848181106107a1576107a16122ed565b90506020028101906107b3919061241a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed192505050565b8282815181106107ff576107ff6122ed565b602002602001018190525080806108159061234b565b915050610783565b5092915050565b60008060006108338887610ef6565b915091506000600260006108478585610f16565b8152602081019190915260400160009081205460ff16915081600881111561087157610871612275565b036108c8576040517f75fcccb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808b16600483015288166024820152604401610672565b60088160088111156108dc576108dc612275565b036108ec5787935050505061096e565b60006108f78a610f86565b9050600061090489610f86565b9050600383600881111561091a5761091a612275565b116109395761092d858584848e88611062565b9550505050505061096e565b600583600881111561094d5761094d612275565b116109605761092d858584848e8861122a565b61092d858584848e886112b2565b95945050505050565b6109818484610708565b610991576109918484848461141d565b50505050565b6000828152602081905260409020600101546109b281610b97565b6105cc8383610c94565b6109918484848461141d565b60008060006109d78585610d4b565b9150915060026000610a4184846040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b815260208101919091526040016000205460ff1695945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061043457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610434565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3d7499ff000000000000000000000000000000000000000000000000000000001480610b8857507fffffffff0000000000000000000000000000000000000000000000000000000082167fac9650d800000000000000000000000000000000000000000000000000000000145b80610434575061043482610a5e565b610ba181336115cc565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166106855760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610c363390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156106855760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080600080610d5b8686610ef6565b91509150610d69828261169c565b9350935050505b9250929050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610db457506008610434565b73ffffffffffffffffffffffffffffffffffffffff8381166103488181149285169081149173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9081149114818015610dfd5750825b80610e0d5750838015610e0d5750805b15610e1f576001945050505050610434565b8215610e3d57610e3287600260076116e7565b945050505050610434565b8315610e5057610e3286600260066116e7565b8015610e6357610e3287600660036116e7565b8115610e7657610e3286600760036116e7565b610e828761034861179d565b15610e9457610e3286600460066116e7565b610eb28773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61179d565b15610ec457610e3286600760056116e7565b5060009695505050505050565b60606106c083836040518060600160405280602781526020016128236027913961188c565b600080610f0284610689565b9150610f0d83610689565b90509250929050565b6000806000610f25858561169c565b60408051606084811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529185901b1660348301528251602881840301815260489092019092528051910120919350915061096e565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831603610fc157506012919050565b73ffffffffffffffffffffffffffffffffffffffff82163b610fe557506008919050565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611030573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611054919061247f565b60ff1692915050565b919050565b60008080600384600881111561107a5761107a612275565b14611086576008611089565b60125b9050600061034873ffffffffffffffffffffffffffffffffffffffff8b1614806110f8575060038560088111156110c2576110c2612275565b1480156110f8575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b16145b9050600185600881111561110e5761110e612275565b036111225761111b6119aa565b92506111c5565b600285600881111561113657611136612275565b036111695761111b61034873ffffffffffffffffffffffffffffffffffffffff8b161461116357896119d1565b8a6119d1565b600385600881111561117d5761117d612275565b036111c5576111c273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff8b16146111bc5789611a0e565b8a611a0e565b92505b80611202576111f86111d787856124a2565b896111e6600086900b8b6124c1565b6111f091906124c1565b60010b611a6e565b9350505050611220565b82611216878a6111e68b600088900b612501565b6111f89190612541565b9695505050505050565b600080600483600881111561124157611241612275565b146112605773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611264565b6103485b905060006112728983611ac2565b905060006112808984611ac2565b90508061129a61129084896124a2565b6111f08b8b6124c1565b6112a49190612541565b9a9950505050505050505050565b60008060068360088111156112c9576112c9612275565b14801561130157508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16105b806113535750600783600881111561131b5761131b612275565b14801561135357508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16115b9050600061135f6119aa565b905081156113c95760006113728a6119d1565b9050600061137f8a611a0e565b905060006113a6611390848a6124a2565b601261139c8d8d6124c1565b6111f09190612501565b9050816113b38583612541565b6113bd9190612541565b95505050505050611220565b60006113d48a611a0e565b905060006113e18a6119d1565b905080611408846113f2858b6124a2565b6113fc91906124a2565b60126111e68d8d6124c1565b6114129190612541565b945050505050611220565b60008061142a8686610d4b565b91509150600061143a8383610d77565b905060006114a084846040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b905060008260088111156114b6576114b6612275565b036115395760008181526002602052604081205460ff16908160088111156114e0576114e0612275565b03611537576040517f2eb4e23d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808b16600483015289166024820152604401610672565b505b600081815260026020526040902080548391907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600881111561158257611582612275565b02179055507f0a30db570583b15d0181da1cbe1212a5753bf36bfeaee751c83ea728df912a938484846040516115ba9392919061257c565b60405180910390a15050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610685576116228173ffffffffffffffffffffffffffffffffffffffff166014611c11565b61162d836020611c11565b60405160200161163e9291906125b6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261067291600401612637565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106116d95782846116dc565b83835b909590945092505050565b600080600080600085600881111561170157611701612275565b87600881111561171357611713612275565b106117375773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8661034889611752565b6103488773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee885b9350935093509350611764888561179d565b1561177557829450505050506106c0565b61177f888361179d565b1561178f5793506106c092505050565b506000979650505050505050565b6040517fbcfd032d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bcfd032d9060440160a060405180830381865afa925050508015611870575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261186d91810190612664565b60015b61187c57506000610434565b6000841395505050505050610434565b606073ffffffffffffffffffffffffffffffffffffffff84163b611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610672565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161195a91906126b4565b600060405180830381855af49150503d8060008114611995576040519150601f19603f3d011682016040523d82523d6000602084013e61199a565b606091505b5091509150611220828286611e54565b60006119cc73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610348611ac2565b905090565b600061034873ffffffffffffffffffffffffffffffffffffffff831614611a03576119fe82610348611ac2565b610434565b6305f5e10092915050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff831614611a5f576119fe8273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611ac2565b670de0b6b3a764000092915050565b600081600003611a7f575081610434565b6000821215611aad57611a91826126d0565b611a9c90600a6127ec565b611aa69084612541565b9050610434565b611ab882600a6127ec565b611aa690846124a2565b6040517fbcfd032d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528281166024830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063bcfd032d9060440160a060405180830381865afa158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b839190612664565b5093505092505060008213611bc3576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bd062015180826127f8565b421115611c09576040517f46ea729300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b60606000611c208360026124a2565b611c2b9060026127f8565b67ffffffffffffffff811115611c4357611c436123eb565b6040519080825280601f01601f191660200182016040528015611c6d576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611ca457611ca46122ed565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611d0757611d076122ed565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000611d438460026124a2565b611d4e9060016127f8565b90505b6001811115611deb577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110611d8f57611d8f6122ed565b1a60f81b828281518110611da557611da56122ed565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611de48161280b565b9050611d51565b5083156106c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610672565b60608315611e635750816106c0565b825115611e735782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106729190612637565b600060208284031215611eb957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146106c057600080fd5b60008083601f840112611efb57600080fd5b50813567ffffffffffffffff811115611f1357600080fd5b6020830191508360208260051b8501011115610d7057600080fd5b60008060008060408587031215611f4457600080fd5b843567ffffffffffffffff80821115611f5c57600080fd5b611f6888838901611ee9565b90965094506020870135915080821115611f8157600080fd5b50611f8e87828801611ee9565b95989497509550505050565b600060208284031215611fac57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461105d57600080fd5b60008060408385031215611fea57600080fd5b82359150610f0d60208401611fb3565b60006020828403121561200c57600080fd5b6106c082611fb3565b6000806040838503121561202857600080fd5b61203183611fb3565b9150610f0d60208401611fb3565b6000806020838503121561205257600080fd5b823567ffffffffffffffff81111561206957600080fd5b61207585828601611ee9565b90969095509350505050565b60005b8381101561209c578181015183820152602001612084565b50506000910152565b600081518084526120bd816020860160208601612081565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612162577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526121508583516120a5565b94509285019290850190600101612116565b5092979650505050505050565b60008083601f84011261218157600080fd5b50813567ffffffffffffffff81111561219957600080fd5b602083019150836020828501011115610d7057600080fd5b6000806000806000608086880312156121c957600080fd5b6121d286611fb3565b9450602086013593506121e760408701611fb3565b9250606086013567ffffffffffffffff81111561220357600080fd5b61220f8882890161216f565b969995985093965092949392505050565b6000806000806060858703121561223657600080fd5b61223f85611fb3565b935061224d60208601611fb3565b9250604085013567ffffffffffffffff81111561226957600080fd5b611f8e8782880161216f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600981106122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6020810161043482846122a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000600019820361235e5761235e61231c565b5060010190565b8183526000602080850194508260005b858110156123ae5773ffffffffffffffffffffffffffffffffffffffff61239b83611fb3565b1687529582019590820190600101612375565b509495945050505050565b6040815260006123cd604083018688612365565b82810360208401526123e0818587612365565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261244f57600080fd5b83018035915067ffffffffffffffff82111561246a57600080fd5b602001915036819003821315610d7057600080fd5b60006020828403121561249157600080fd5b815160ff811681146106c057600080fd5b60008160001904831182151516156124bc576124bc61231c565b500290565b600182810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80008112617fff821317156104345761043461231c565b600181810b9083900b01617fff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000821217156104345761043461231c565b600082612577577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff848116825283166020820152606081016125ae60408301846122a4565b949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516125ee816017850160208801612081565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000601791840191820152835161262b816028840160208801612081565b01602801949350505050565b6020815260006106c060208301846120a5565b805169ffffffffffffffffffff8116811461105d57600080fd5b600080600080600060a0868803121561267c57600080fd5b6126858661264a565b94506020860151935060408601519250606086015191506126a86080870161264a565b90509295509295909350565b600082516126c6818460208701612081565b9190910192915050565b60007f800000000000000000000000000000000000000000000000000000000000000082036127015761270161231c565b5060000390565b600181815b808511156127435781600019048211156127295761272961231c565b8085161561273657918102915b93841c939080029061270d565b509250929050565b60008261275a57506001610434565b8161276757506000610434565b816001811461277d5760028114612787576127a3565b6001915050610434565b60ff8411156127985761279861231c565b50506001821b610434565b5060208310610133831016604e8410600b84101617156127c6575081810a610434565b6127d08383612708565b80600019048211156127e4576127e461231c565b029392505050565b60006106c0838361274b565b808201808211156104345761043461231c565b60008161281a5761281a61231c565b50600019019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122050d5cc1e245021db9d6adf9064580ed173acfae28ba9ff93d00846b8e30e5ac664736f6c63430008100033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
