{
  "_format": "hh-sol-artifact-1",
  "contractName": "ChainlinkOracle",
  "sourceName": "contracts/oracles/ChainlinkOracle.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "calledContract",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        }
      ],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAccessControlManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAccessControlManager",
          "type": "address"
        }
      ],
      "name": "NewAccessControlManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousPriceMantissa",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newPriceMantissa",
          "type": "uint256"
        }
      ],
      "name": "PricePosted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "feed",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxStalePeriod",
          "type": "uint256"
        }
      ],
      "name": "TokenConfigAdded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "NATIVE_TOKEN_ADDR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accessControlManager",
      "outputs": [
        {
          "internalType": "contract IAccessControlManagerV8",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "prices",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "name": "setAccessControlManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        }
      ],
      "name": "setDirectPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "feed",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "maxStalePeriod",
              "type": "uint256"
            }
          ],
          "internalType": "struct ChainlinkOracle.TokenConfig",
          "name": "tokenConfig",
          "type": "tuple"
        }
      ],
      "name": "setTokenConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "feed",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "maxStalePeriod",
              "type": "uint256"
            }
          ],
          "internalType": "struct ChainlinkOracle.TokenConfig[]",
          "name": "tokenConfigs_",
          "type": "tuple[]"
        }
      ],
      "name": "setTokenConfigs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokenConfigs",
      "outputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "feed",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxStalePeriod",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561000f575f80fd5b5061001861001d565b610101565b5f54610100900460ff161561004d5760405162461bcd60e51b8152600401610044906100a1565b60405180910390fd5b5f5460ff9081161461009f575f805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249891610096916100f2565b60405180910390a15b565b602080825281016100ec81602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b92915050565b60ff82168152602081016100ec565b6115618061010e5f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c806379ba509711610093578063c4d66de811610063578063c4d66de814610213578063cfed246b14610226578063e30c397814610245578063f2fde38b14610256575f80fd5b806379ba5097146101bd5780638da5cb5b146101c5578063a9534f8a146101df578063b4a0bdf3146101fa575f80fd5b80631b69dc5f116100ce5780631b69dc5f1461012f578063392787d21461018257806341976e0914610195578063715018a6146101b5575f80fd5b80630431710e146100f457806309a8acb0146101095780630e32cb861461011c575b5f80fd5b610107610102366004610d5a565b610269565b005b610107610117366004610d92565b6102cd565b61010761012a366004610dcc565b610393565b61016a61013d366004610dcc565b60ca6020525f90815260409020805460018201546002909201546001600160a01b03918216929091169083565b60405161017993929190610dff565b60405180910390f35b610107610190366004610e27565b6103a7565b6101a86101a3366004610dcc565b6104ef565b6040516101799190610e45565b61010761059a565b6101076105ad565b6033546001600160a01b03165b6040516101799190610e53565b6101d273bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb81565b6097546001600160a01b03166040516101799190610e7e565b610107610221366004610dcc565b6105e2565b6101a8610234366004610dcc565b60c96020525f908152604090205481565b6065546001600160a01b03166101d2565b610107610264366004610dcc565b6106ad565b80515f036102925760405162461bcd60e51b815260040161028990610eb6565b60405180910390fd5b80515f5b818110156102c8576102c08382815181106102b3576102b3610ec6565b60200260200101516103a7565b600101610296565b505050565b816001600160a01b0381166102f45760405162461bcd60e51b815260040161028990610f05565b6103326040518060400160405280601f81526020017f736574446972656374507269636528616464726573732c75696e74323536290081525061071e565b6001600160a01b0383165f81815260c960205260409081902080549085905590519091907fa0844d44570b5ec5ac55e9e7d1e7fc8149b4f33b4b61f3c8fc08bacce058faee906103859084908790610f15565b60405180910390a250505050565b61039b6107b5565b6103a4816107df565b50565b80516001600160a01b0381166103cf5760405162461bcd60e51b815260040161028990610f05565b60208201516001600160a01b0381166103fa5760405162461bcd60e51b815260040161028990610f05565b6104386040518060400160405280601b81526020017f736574546f6b656e436f6e66696728546f6b656e436f6e66696729000000000081525061071e565b82604001515f0361045b5760405162461bcd60e51b815260040161028990610f63565b82516001600160a01b039081165f90815260ca6020908152604091829020865181549085166001600160a01b0319918216811783559288015160018301805496821696909216959095179055828701516002909101819055915190927f3cc8d9cb9370a23a8b9ffa75efa24cecb65c4693980e58260841adc474983c5f926104e292610f73565b60405180910390a2505050565b5f8073bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba196001600160a01b0384160161051e57506012610589565b5f839050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561055e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105829190610f95565b60ff169150505b6105938382610858565b9392505050565b6105a26107b5565b6105ab5f6108b8565b565b60655433906001600160a01b031681146105d95760405162461bcd60e51b815260040161028990610ffb565b6103a4816108b8565b5f54610100900460ff161580801561060057505f54600160ff909116105b806106195750303b15801561061957505f5460ff166001145b6106355760405162461bcd60e51b815260040161028990611055565b5f805460ff191660011790558015610656575f805461ff0019166101001790555b61065f826108d1565b80156106a9575f805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906106a090600190611078565b60405180910390a15b5050565b6106b56107b5565b606580546001600160a01b0383166001600160a01b031990911681179091556106e66033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546040516318c5e8ab60e01b81525f916001600160a01b0316906318c5e8ab9061075090339086906004016110c2565b602060405180830381865afa15801561076b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078f91906110f5565b9050806106a957333083604051634a3fa29360e01b815260040161028993929190611113565b6033546001600160a01b031633146105ab5760405162461bcd60e51b81526004016102899061117a565b6001600160a01b0381166108055760405162461bcd60e51b8152600401610289906111cb565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906106a090839085906111db565b6001600160a01b0382165f90815260c96020526040812054801561087e5780915061088a565b61088784610908565b91505b5f61089684601261120a565b90506108a381600a611329565b6108ad9084611336565b925050505b92915050565b606580546001600160a01b03191690556103a481610ae3565b5f54610100900460ff166108f75760405162461bcd60e51b81526004016102899061139c565b6108ff610b34565b6103a481610b62565b6001600160a01b038082165f90815260ca6020526040812054909116806109415760405162461bcd60e51b815260040161028990610f05565b6001600160a01b038084165f90815260ca6020908152604080832081516060810183528154861681526001820154909516858401819052600290910154858301819052825163313ce56760e01b81529251919490939092859263313ce567926004808401939192918290030181865afa1580156109c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e49190610f95565b6109ef9060126113ac565b60ff1690505f80846001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5691906113f1565b509350509250505f8213610a7c5760405162461bcd60e51b815260040161028990611495565b80421015610a9c5760405162461bcd60e51b8152600401610289906114d8565b4281900384811115610ac05760405162461bcd60e51b81526004016102899061151b565b610acb84600a611329565b610ad59084611336565b9a9950505050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16610b5a5760405162461bcd60e51b81526004016102899061139c565b6105ab610b88565b5f54610100900460ff1661039b5760405162461bcd60e51b81526004016102899061139c565b5f54610100900460ff16610bae5760405162461bcd60e51b81526004016102899061139c565b6105ab336108b8565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff82111715610bf157610bf1610bb7565b6040525050565b5f610c0260405190565b9050610c0e8282610bcb565b919050565b5f67ffffffffffffffff821115610c2c57610c2c610bb7565b5060209081020190565b5f6001600160a01b0382166108b2565b610c4f81610c36565b81146103a4575f80fd5b80356108b281610c46565b80610c4f565b80356108b281610c64565b5f60608284031215610c8857610c885f80fd5b610c926060610bf8565b90505f610c9f8484610c59565b8252506020610cb084848301610c59565b6020830152506040610cc484828501610c6a565b60408301525092915050565b5f610ce2610cdd84610c13565b610bf8565b83815290506020810160608402830185811115610d0057610d005f80fd5b835b81811015610d265780610d158882610c75565b845250602090920191606001610d02565b5050509392505050565b5f82601f830112610d4257610d425f80fd5b8135610d52848260208601610cd0565b949350505050565b5f60208284031215610d6d57610d6d5f80fd5b813567ffffffffffffffff811115610d8657610d865f80fd5b610d5284828501610d30565b5f8060408385031215610da657610da65f80fd5b5f610db18585610c59565b9250506020610dc285828601610c6a565b9150509250929050565b5f60208284031215610ddf57610ddf5f80fd5b5f610d528484610c59565b610df381610c36565b82525050565b80610df3565b60608101610e0d8286610dea565b610e1a6020830185610dea565b610d526040830184610df9565b5f60608284031215610e3a57610e3a5f80fd5b5f610d528484610c75565b602081016108b28284610df9565b602081016108b28284610dea565b5f6108b282610c36565b5f6108b282610e61565b610df381610e6b565b602081016108b28284610e75565b601181525f602082017006c656e6774682063616e2774206265203607c1b815291505b5060200190565b602080825281016108b281610e8c565b634e487b7160e01b5f52603260045260245ffd5b601581525f602082017463616e2774206265207a65726f206164647265737360581b81529150610eaf565b602080825281016108b281610eda565b60408101610f238285610df9565b6105936020830184610df9565b601a81525f602082017f7374616c6520706572696f642063616e2774206265207a65726f00000000000081529150610eaf565b602080825281016108b281610f30565b60408101610f238285610dea565b60ff8116610c4f565b80516108b281610f81565b5f60208284031215610fa857610fa85f80fd5b5f610d528484610f8a565b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b602080825281016108b281610fb3565b602e81525f602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610ff4565b602080825281016108b28161100b565b5f60ff82166108b2565b610df381611065565b602081016108b2828461106f565b8281835e505f910152565b5f61109a825190565b8084526020840193506110b1818560208601611086565b601f01601f19169290920192915050565b604081016110d08285610dea565b8181036020830152610d528184611091565b801515610c4f565b80516108b2816110e2565b5f60208284031215611108576111085f80fd5b5f610d5284846110ea565b606081016111218286610dea565b61112e6020830185610dea565b81810360408301526111408184611091565b95945050505050565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f610eaf565b602080825281016108b281611149565b602581525f602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150610ff4565b602080825281016108b28161118a565b604081016111e98285610dea565b6105936020830184610dea565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108b2576108b26111f6565b80825b600185111561125c5780860481111561123b5761123b6111f6565b600185161561124957908102905b80026112558560011c90565b9450611220565b94509492505050565b5f8261127357506001610593565b8161127f57505f610593565b8160018114611295576002811461129f576112cc565b6001915050610593565b60ff8411156112b0576112b06111f6565b8360020a9150848211156112c6576112c66111f6565b50610593565b5060208310610133831016604e8410600b84101617156112ff575081810a838111156112fa576112fa6111f6565b610593565b61130c848484600161121d565b92509050818404811115611322576113226111f6565b0292915050565b5f6105935f198484611265565b81810280821583820485141761134e5761134e6111f6565b5092915050565b602b81525f602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610ff4565b602080825281016108b281611355565b60ff9182169190811690828203908111156108b2576108b26111f6565b69ffffffffffffffffffff8116610c4f565b80516108b2816113c9565b80516108b281610c64565b5f805f805f60a08688031215611408576114085f80fd5b5f61141388886113db565b9550506020611424888289016113e6565b9450506040611435888289016113e6565b9350506060611446888289016113e6565b9250506080611457888289016113db565b9150509295509295909350565b60208082527f636861696e6c696e6b207072696365206d75737420626520706f73697469766591019081525f610eaf565b602080825281016108b281611464565b601c81525f602082017f757064617465644174206578636565647320626c6f636b2074696d650000000081529150610eaf565b602080825281016108b2816114a5565b601781525f602082017f636861696e6c696e6b207072696365206578706972656400000000000000000081529150610eaf565b602080825281016108b2816114e856fea2646970667358221220f836632878c3069e88247c9ba2d062c721f6b65d5efa019c863ad403c4efc77564736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c806379ba509711610093578063c4d66de811610063578063c4d66de814610213578063cfed246b14610226578063e30c397814610245578063f2fde38b14610256575f80fd5b806379ba5097146101bd5780638da5cb5b146101c5578063a9534f8a146101df578063b4a0bdf3146101fa575f80fd5b80631b69dc5f116100ce5780631b69dc5f1461012f578063392787d21461018257806341976e0914610195578063715018a6146101b5575f80fd5b80630431710e146100f457806309a8acb0146101095780630e32cb861461011c575b5f80fd5b610107610102366004610d5a565b610269565b005b610107610117366004610d92565b6102cd565b61010761012a366004610dcc565b610393565b61016a61013d366004610dcc565b60ca6020525f90815260409020805460018201546002909201546001600160a01b03918216929091169083565b60405161017993929190610dff565b60405180910390f35b610107610190366004610e27565b6103a7565b6101a86101a3366004610dcc565b6104ef565b6040516101799190610e45565b61010761059a565b6101076105ad565b6033546001600160a01b03165b6040516101799190610e53565b6101d273bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb81565b6097546001600160a01b03166040516101799190610e7e565b610107610221366004610dcc565b6105e2565b6101a8610234366004610dcc565b60c96020525f908152604090205481565b6065546001600160a01b03166101d2565b610107610264366004610dcc565b6106ad565b80515f036102925760405162461bcd60e51b815260040161028990610eb6565b60405180910390fd5b80515f5b818110156102c8576102c08382815181106102b3576102b3610ec6565b60200260200101516103a7565b600101610296565b505050565b816001600160a01b0381166102f45760405162461bcd60e51b815260040161028990610f05565b6103326040518060400160405280601f81526020017f736574446972656374507269636528616464726573732c75696e74323536290081525061071e565b6001600160a01b0383165f81815260c960205260409081902080549085905590519091907fa0844d44570b5ec5ac55e9e7d1e7fc8149b4f33b4b61f3c8fc08bacce058faee906103859084908790610f15565b60405180910390a250505050565b61039b6107b5565b6103a4816107df565b50565b80516001600160a01b0381166103cf5760405162461bcd60e51b815260040161028990610f05565b60208201516001600160a01b0381166103fa5760405162461bcd60e51b815260040161028990610f05565b6104386040518060400160405280601b81526020017f736574546f6b656e436f6e66696728546f6b656e436f6e66696729000000000081525061071e565b82604001515f0361045b5760405162461bcd60e51b815260040161028990610f63565b82516001600160a01b039081165f90815260ca6020908152604091829020865181549085166001600160a01b0319918216811783559288015160018301805496821696909216959095179055828701516002909101819055915190927f3cc8d9cb9370a23a8b9ffa75efa24cecb65c4693980e58260841adc474983c5f926104e292610f73565b60405180910390a2505050565b5f8073bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba196001600160a01b0384160161051e57506012610589565b5f839050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561055e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105829190610f95565b60ff169150505b6105938382610858565b9392505050565b6105a26107b5565b6105ab5f6108b8565b565b60655433906001600160a01b031681146105d95760405162461bcd60e51b815260040161028990610ffb565b6103a4816108b8565b5f54610100900460ff161580801561060057505f54600160ff909116105b806106195750303b15801561061957505f5460ff166001145b6106355760405162461bcd60e51b815260040161028990611055565b5f805460ff191660011790558015610656575f805461ff0019166101001790555b61065f826108d1565b80156106a9575f805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906106a090600190611078565b60405180910390a15b5050565b6106b56107b5565b606580546001600160a01b0383166001600160a01b031990911681179091556106e66033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546040516318c5e8ab60e01b81525f916001600160a01b0316906318c5e8ab9061075090339086906004016110c2565b602060405180830381865afa15801561076b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078f91906110f5565b9050806106a957333083604051634a3fa29360e01b815260040161028993929190611113565b6033546001600160a01b031633146105ab5760405162461bcd60e51b81526004016102899061117a565b6001600160a01b0381166108055760405162461bcd60e51b8152600401610289906111cb565b609780546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0906106a090839085906111db565b6001600160a01b0382165f90815260c96020526040812054801561087e5780915061088a565b61088784610908565b91505b5f61089684601261120a565b90506108a381600a611329565b6108ad9084611336565b925050505b92915050565b606580546001600160a01b03191690556103a481610ae3565b5f54610100900460ff166108f75760405162461bcd60e51b81526004016102899061139c565b6108ff610b34565b6103a481610b62565b6001600160a01b038082165f90815260ca6020526040812054909116806109415760405162461bcd60e51b815260040161028990610f05565b6001600160a01b038084165f90815260ca6020908152604080832081516060810183528154861681526001820154909516858401819052600290910154858301819052825163313ce56760e01b81529251919490939092859263313ce567926004808401939192918290030181865afa1580156109c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e49190610f95565b6109ef9060126113ac565b60ff1690505f80846001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5691906113f1565b509350509250505f8213610a7c5760405162461bcd60e51b815260040161028990611495565b80421015610a9c5760405162461bcd60e51b8152600401610289906114d8565b4281900384811115610ac05760405162461bcd60e51b81526004016102899061151b565b610acb84600a611329565b610ad59084611336565b9a9950505050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16610b5a5760405162461bcd60e51b81526004016102899061139c565b6105ab610b88565b5f54610100900460ff1661039b5760405162461bcd60e51b81526004016102899061139c565b5f54610100900460ff16610bae5760405162461bcd60e51b81526004016102899061139c565b6105ab336108b8565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff82111715610bf157610bf1610bb7565b6040525050565b5f610c0260405190565b9050610c0e8282610bcb565b919050565b5f67ffffffffffffffff821115610c2c57610c2c610bb7565b5060209081020190565b5f6001600160a01b0382166108b2565b610c4f81610c36565b81146103a4575f80fd5b80356108b281610c46565b80610c4f565b80356108b281610c64565b5f60608284031215610c8857610c885f80fd5b610c926060610bf8565b90505f610c9f8484610c59565b8252506020610cb084848301610c59565b6020830152506040610cc484828501610c6a565b60408301525092915050565b5f610ce2610cdd84610c13565b610bf8565b83815290506020810160608402830185811115610d0057610d005f80fd5b835b81811015610d265780610d158882610c75565b845250602090920191606001610d02565b5050509392505050565b5f82601f830112610d4257610d425f80fd5b8135610d52848260208601610cd0565b949350505050565b5f60208284031215610d6d57610d6d5f80fd5b813567ffffffffffffffff811115610d8657610d865f80fd5b610d5284828501610d30565b5f8060408385031215610da657610da65f80fd5b5f610db18585610c59565b9250506020610dc285828601610c6a565b9150509250929050565b5f60208284031215610ddf57610ddf5f80fd5b5f610d528484610c59565b610df381610c36565b82525050565b80610df3565b60608101610e0d8286610dea565b610e1a6020830185610dea565b610d526040830184610df9565b5f60608284031215610e3a57610e3a5f80fd5b5f610d528484610c75565b602081016108b28284610df9565b602081016108b28284610dea565b5f6108b282610c36565b5f6108b282610e61565b610df381610e6b565b602081016108b28284610e75565b601181525f602082017006c656e6774682063616e2774206265203607c1b815291505b5060200190565b602080825281016108b281610e8c565b634e487b7160e01b5f52603260045260245ffd5b601581525f602082017463616e2774206265207a65726f206164647265737360581b81529150610eaf565b602080825281016108b281610eda565b60408101610f238285610df9565b6105936020830184610df9565b601a81525f602082017f7374616c6520706572696f642063616e2774206265207a65726f00000000000081529150610eaf565b602080825281016108b281610f30565b60408101610f238285610dea565b60ff8116610c4f565b80516108b281610f81565b5f60208284031215610fa857610fa85f80fd5b5f610d528484610f8a565b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b602080825281016108b281610fb3565b602e81525f602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150610ff4565b602080825281016108b28161100b565b5f60ff82166108b2565b610df381611065565b602081016108b2828461106f565b8281835e505f910152565b5f61109a825190565b8084526020840193506110b1818560208601611086565b601f01601f19169290920192915050565b604081016110d08285610dea565b8181036020830152610d528184611091565b801515610c4f565b80516108b2816110e2565b5f60208284031215611108576111085f80fd5b5f610d5284846110ea565b606081016111218286610dea565b61112e6020830185610dea565b81810360408301526111408184611091565b95945050505050565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f610eaf565b602080825281016108b281611149565b602581525f602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150610ff4565b602080825281016108b28161118a565b604081016111e98285610dea565b6105936020830184610dea565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108b2576108b26111f6565b80825b600185111561125c5780860481111561123b5761123b6111f6565b600185161561124957908102905b80026112558560011c90565b9450611220565b94509492505050565b5f8261127357506001610593565b8161127f57505f610593565b8160018114611295576002811461129f576112cc565b6001915050610593565b60ff8411156112b0576112b06111f6565b8360020a9150848211156112c6576112c66111f6565b50610593565b5060208310610133831016604e8410600b84101617156112ff575081810a838111156112fa576112fa6111f6565b610593565b61130c848484600161121d565b92509050818404811115611322576113226111f6565b0292915050565b5f6105935f198484611265565b81810280821583820485141761134e5761134e6111f6565b5092915050565b602b81525f602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150610ff4565b602080825281016108b281611355565b60ff9182169190811690828203908111156108b2576108b26111f6565b69ffffffffffffffffffff8116610c4f565b80516108b2816113c9565b80516108b281610c64565b5f805f805f60a08688031215611408576114085f80fd5b5f61141388886113db565b9550506020611424888289016113e6565b9450506040611435888289016113e6565b9350506060611446888289016113e6565b9250506080611457888289016113db565b9150509295509295909350565b60208082527f636861696e6c696e6b207072696365206d75737420626520706f73697469766591019081525f610eaf565b602080825281016108b281611464565b601c81525f602082017f757064617465644174206578636565647320626c6f636b2074696d650000000081529150610eaf565b602080825281016108b2816114a5565b601781525f602082017f636861696e6c696e6b207072696365206578706972656400000000000000000081529150610eaf565b602080825281016108b2816114e856fea2646970667358221220f836632878c3069e88247c9ba2d062c721f6b65d5efa019c863ad403c4efc77564736f6c63430008190033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
