{
  "_format": "hh-sol-artifact-1",
  "contractName": "PendleBridgedPrincipalTokenAlt",
  "sourceName": "contracts/cross-chain/oftImpl/spoke/PendleBridgedPrincipalTokenAlt.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "_lzEndpoint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_localDecimals",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "_sharedDecimals",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidDelegate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidEndpointCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLocalDecimals",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "options",
          "type": "bytes"
        }
      ],
      "name": "InvalidOptions",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LzTokenUnavailable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "msgValue",
          "type": "uint256"
        }
      ],
      "name": "MsgValueNotZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NativeTokenUnavailable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "NoPeer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "msgValue",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughNative",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "OnlyEndpoint",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }
      ],
      "name": "OnlyPeer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlySelf",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "name": "SimulationResult",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountLD",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minAmountLD",
          "type": "uint256"
        }
      ],
      "name": "SlippageExceeded",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "eid",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "msgType",
              "type": "uint16"
            },
            {
              "internalType": "bytes",
              "name": "options",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct EnforcedOptionParam[]",
          "name": "_enforcedOptions",
          "type": "tuple[]"
        }
      ],
      "name": "EnforcedOptionSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "inspector",
          "type": "address"
        }
      ],
      "name": "MsgInspectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }
      ],
      "name": "OFTReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "guid",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountSentLD",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountReceivedLD",
          "type": "uint256"
        }
      ],
      "name": "OFTSent",
      "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": false,
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "peer",
          "type": "bytes32"
        }
      ],
      "name": "PeerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "preCrimeAddress",
          "type": "address"
        }
      ],
      "name": "PreCrimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "SEND",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SEND_AND_CALL",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "origin",
          "type": "tuple"
        }
      ],
      "name": "allowInitializePath",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "approvalRequired",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "_msgType",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_extraOptions",
          "type": "bytes"
        }
      ],
      "name": "combineOptions",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimalConversionRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endpoint",
      "outputs": [
        {
          "internalType": "contract ILayerZeroEndpointV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "msgType",
          "type": "uint16"
        }
      ],
      "name": "enforcedOptions",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "enforcedOption",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "expiry",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "isComposeMsgSender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_peer",
          "type": "bytes32"
        }
      ],
      "name": "isPeer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "_origin",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_guid",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_executor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "srcEid",
                  "type": "uint32"
                },
                {
                  "internalType": "bytes32",
                  "name": "sender",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint64",
                  "name": "nonce",
                  "type": "uint64"
                }
              ],
              "internalType": "struct Origin",
              "name": "origin",
              "type": "tuple"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "guid",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "executor",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct InboundPacket[]",
          "name": "_packets",
          "type": "tuple[]"
        }
      ],
      "name": "lzReceiveAndRevert",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "_origin",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_guid",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_executor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "lzReceiveSimulate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "msgInspector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "nextNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "nonce",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oApp",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "senderVersion",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "receiverVersion",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oftVersion",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        },
        {
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "peers",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "peer",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "preCrime",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "to",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "amountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraOptions",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "composeMsg",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "oftCmd",
              "type": "bytes"
            }
          ],
          "internalType": "struct SendParam",
          "name": "_sendParam",
          "type": "tuple"
        }
      ],
      "name": "quoteOFT",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxAmountLD",
              "type": "uint256"
            }
          ],
          "internalType": "struct OFTLimit",
          "name": "oftLimit",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "int256",
              "name": "feeAmountLD",
              "type": "int256"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct OFTFeeDetail[]",
          "name": "oftFeeDetails",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "amountSentLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountReceivedLD",
              "type": "uint256"
            }
          ],
          "internalType": "struct OFTReceipt",
          "name": "oftReceipt",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "to",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "amountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraOptions",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "composeMsg",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "oftCmd",
              "type": "bytes"
            }
          ],
          "internalType": "struct SendParam",
          "name": "_sendParam",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "_payInLzToken",
          "type": "bool"
        }
      ],
      "name": "quoteSend",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nativeFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lzTokenFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct MessagingFee",
          "name": "msgFee",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "to",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "amountLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmountLD",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraOptions",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "composeMsg",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "oftCmd",
              "type": "bytes"
            }
          ],
          "internalType": "struct SendParam",
          "name": "_sendParam",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "nativeFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lzTokenFee",
              "type": "uint256"
            }
          ],
          "internalType": "struct MessagingFee",
          "name": "_fee",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "_refundAddress",
          "type": "address"
        }
      ],
      "name": "send",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "guid",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "nativeFee",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "lzTokenFee",
                  "type": "uint256"
                }
              ],
              "internalType": "struct MessagingFee",
              "name": "fee",
              "type": "tuple"
            }
          ],
          "internalType": "struct MessagingReceipt",
          "name": "msgReceipt",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "amountSentLD",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amountReceivedLD",
              "type": "uint256"
            }
          ],
          "internalType": "struct OFTReceipt",
          "name": "oftReceipt",
          "type": "tuple"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        }
      ],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "eid",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "msgType",
              "type": "uint16"
            },
            {
              "internalType": "bytes",
              "name": "options",
              "type": "bytes"
            }
          ],
          "internalType": "struct EnforcedOptionParam[]",
          "name": "_enforcedOptions",
          "type": "tuple[]"
        }
      ],
      "name": "setEnforcedOptions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_msgInspector",
          "type": "address"
        }
      ],
      "name": "setMsgInspector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_peer",
          "type": "bytes32"
        }
      ],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_preCrime",
          "type": "address"
        }
      ],
      "name": "setPreCrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "sharedDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x610140604052348015610010575f5ffd5b50604051613c34380380613c3483398101604081905261002f9161034b565b878787878787878787878787838361004660e05190565b84848181818161005533610218565b6001600160a01b03808316608052811661008257604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b1580156100c6575f5ffd5b505af11580156100d8573d5f5f3e3d5ffd5b50505050505050506100ee61026760201b60201c565b60ff168360ff161015610114576040516301e9714b60e41b815260040160405180910390fd5b61010051610122908461041e565b61012d90600a610520565b60a0525060089150610141905083826105b9565b50600961014e82826105b9565b50505060c088905250610165925083915050610218565b60ff80841660e08190529083166101008190526101819161041e565b61018c90600a610520565b60a0818152505050505050505050506080516001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101fd9190610673565b6001600160a01b0316610120525061068c9650505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6101005190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610291575f5ffd5b81516001600160401b038111156102aa576102aa61026e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102d8576102d861026e565b6040528181528382016020018510156102ef575f5ffd5b5f5b8281101561030d576020818601810151838301820152016102f1565b505f918101602001919091529392505050565b80516001600160a01b0381168114610336575f5ffd5b919050565b805160ff81168114610336575f5ffd5b5f5f5f5f5f5f5f5f610100898b031215610363575f5ffd5b88516001600160401b03811115610378575f5ffd5b6103848b828c01610282565b60208b015190995090506001600160401b038111156103a1575f5ffd5b6103ad8b828c01610282565b9750506103bc60408a01610320565b95506103ca60608a01610320565b9450608089015193506103df60a08a0161033b565b92506103ed60c08a0161033b565b91506103fb60e08a01610320565b90509295985092959890939650565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156104375761043761040a565b92915050565b6001815b60018411156104785780850481111561045c5761045c61040a565b600184161561046a57908102905b60019390931c928002610441565b935093915050565b5f8261048e57506001610437565b8161049a57505f610437565b81600181146104b057600281146104ba576104d6565b6001915050610437565b60ff8411156104cb576104cb61040a565b50506001821b610437565b5060208310610133831016604e8410600b84101617156104f9575081810a610437565b6105055f19848461043d565b805f19048211156105185761051861040a565b029392505050565b5f61052e60ff841683610480565b9392505050565b600181811c9082168061054957607f821691505b60208210810361056757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156105b457805f5260205f20601f840160051c810160208510156105925750805b601f840160051c820191505b818110156105b1575f815560010161059e565b50505b505050565b81516001600160401b038111156105d2576105d261026e565b6105e6816105e08454610535565b8461056d565b6020601f821160018114610618575f83156106015750848201515b5f19600385901b1c1916600184901b1784556105b1565b5f84815260208120601f198516915b828110156106475787850151825560209485019460019092019101610627565b508482101561066457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610683575f5ffd5b61052e82610320565b60805160a05160c05160e051610100516101205161350661072e5f395f818161079d015281816121dd015261222f01525f61059101525f6103a501525f6107d001525f81816105ee01528181611ce701528181611d590152611e3501525f81816104a201528181610a510152818161111a01528181611503015281816119b201528181611f47015281816122520152818161227e015261233501526135065ff3fe60806040526004361061020c575f3560e01c806306fdde0314610210578063095ea7b31461023a5780630d35b41514610269578063111ecdad1461029757806313137d65146102c3578063134d4f25146102d8578063156a0d0f146102ff57806317442b701461032557806318160ddd146103465780631f5e13341461036457806323b872dd14610378578063313ce567146103975780633400288b146103d757806339509351146103f65780633b6f743b1461041557806352ae2879146104415780635535d461146104535780635a0dfe4d146104725780635e280f11146104915780636fc1b31e146104c457806370a08231146104e3578063715018a6146105175780637d25a05e1461052b57806382413eac14610564578063857749b0146105835780638da5cb5b146105b557806395d89b41146105c9578063963efcaa146105dd5780639f68b96414610610578063a457c2d714610622578063a9059cbb14610641578063b731ea0a14610660578063b98bd0701461067f578063bb0b6a531461069e578063bc70b354146106c9578063bd815db0146106e8578063c7c7f5b3146106fb578063ca5eb5e11461071c578063d045a0dc1461073b578063d42438851461074e578063dd62ed3e1461076d578063e1758bd81461078c578063e184c9be146107bf578063f2fde38b146107f2578063fc0c546a14610441578063ff7bd03d14610811575b5f5ffd5b34801561021b575f5ffd5b50610224610830565b6040516102319190612611565b60405180910390f35b348015610245575f5ffd5b50610259610254366004612637565b6108c0565b6040519015158152602001610231565b348015610274575f5ffd5b50610288610283366004612677565b6108d9565b604051610231939291906126b7565b3480156102a2575f5ffd5b506004546102b6906001600160a01b031681565b6040516102319190612747565b6102d66102d13660046127af565b610a4f565b005b3480156102e3575f5ffd5b506102ec600281565b60405161ffff9091168152602001610231565b34801561030a575f5ffd5b506040805162b9270b60e21b81526001602082015201610231565b348015610330575f5ffd5b5060408051600181526002602082015201610231565b348015610351575f5ffd5b506007545b604051908152602001610231565b34801561036f575f5ffd5b506102ec600181565b348015610383575f5ffd5b50610259610392366004612849565b610b07565b3480156103a2575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405160ff9091168152602001610231565b3480156103e2575f5ffd5b506102d66103f136600461289f565b610b2c565b348015610401575f5ffd5b50610259610410366004612637565b610b42565b348015610420575f5ffd5b5061043461042f3660046128c6565b610b63565b6040516102319190612914565b34801561044c575f5ffd5b50306102b6565b34801561045e575f5ffd5b5061022461046d366004612933565b610bbc565b34801561047d575f5ffd5b5061025961048c36600461289f565b610c5e565b34801561049c575f5ffd5b506102b67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cf575f5ffd5b506102d66104de366004612964565b610c79565b3480156104ee575f5ffd5b506103566104fd366004612964565b6001600160a01b03165f9081526005602052604090205490565b348015610522575f5ffd5b506102d6610cd7565b348015610536575f5ffd5b5061054c61054536600461289f565b5f92915050565b6040516001600160401b039091168152602001610231565b34801561056f575f5ffd5b5061025961057e36600461297f565b610cea565b34801561058e575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006103c5565b3480156105c0575f5ffd5b506102b6610cff565b3480156105d4575f5ffd5b50610224610d0d565b3480156105e8575f5ffd5b506103567f000000000000000000000000000000000000000000000000000000000000000081565b34801561061b575f5ffd5b505f610259565b34801561062d575f5ffd5b5061025961063c366004612637565b610d1c565b34801561064c575f5ffd5b5061025961065b366004612637565b610da1565b34801561066b575f5ffd5b506002546102b6906001600160a01b031681565b34801561068a575f5ffd5b506102d6610699366004612a21565b610dae565b3480156106a9575f5ffd5b506103566106b8366004612a5f565b60016020525f908152604090205481565b3480156106d4575f5ffd5b506102246106e3366004612a78565b610dc8565b6102d66106f6366004612a21565b610f69565b61070e610709366004612ad4565b6110d3565b604051610231929190612b3c565b348015610727575f5ffd5b506102d6610736366004612964565b6110fb565b6102d66107493660046127af565b61117f565b348015610759575f5ffd5b506102d6610768366004612964565b6111ae565b348015610778575f5ffd5b50610356610787366004612b78565b611201565b348015610797575f5ffd5b506102b67f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ca575f5ffd5b506103567f000000000000000000000000000000000000000000000000000000000000000081565b3480156107fd575f5ffd5b506102d661080c366004612964565b61122b565b34801561081c575f5ffd5b5061025961082b366004612ba4565b6112a4565b60606008805461083f90612bbe565b80601f016020809104026020016040519081016040528092919081815260200182805461086b90612bbe565b80156108b65780601f1061088d576101008083540402835291602001916108b6565b820191905f5260205f20905b81548152906001019060200180831161089957829003601f168201915b5050505050905090565b5f336108cd8185856112d8565b60019150505b92915050565b604080518082019091525f808252602082015260606108f6612589565b5f5f90505f306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610937573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095b9190612bf0565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610996573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ba9190612c0b565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610a0d565b604080518082019091525f8152606060208201528152602001906001900390816109e65790505b5093505f80610a31604089013560608a0135610a2c60208c018c612a5f565b6113fb565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610aa357336040516391ac5e4f60e01b8152600401610a9a9190612747565b60405180910390fd5b60208701803590610abd90610ab8908a612a5f565b611436565b14610aef57610acf6020880188612a5f565b876020013560405163309afaf360e21b8152600401610a9a929190612c36565b610afe87878787878787611471565b50505050505050565b5f33610b148582856115c8565b610b1f858585611640565b60019150505b9392505050565b610b346117d6565b610b3e8282611835565b5050565b5f336108cd818585610b548383611201565b610b5e9190612c60565b6112d8565b610b6b612589565b5f610b8660408501356060860135610a2c6020880188612a5f565b9150505f5f610b95868461188a565b9092509050610bb2610baa6020880188612a5f565b8383886119a8565b9695505050505050565b600360209081525f928352604080842090915290825290208054610bdf90612bbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0b90612bbe565b8015610c565780601f10610c2d57610100808354040283529160200191610c56565b820191905f5260205f20905b815481529060010190602001808311610c3957829003601f168201915b505050505081565b63ffffffff919091165f908152600160205260409020541490565b610c816117d6565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419790610ccc908390612747565b60405180910390a150565b610cdf6117d6565b610ce85f611a7b565b565b6001600160a01b03811630145b949350505050565b5f546001600160a01b031690565b60606009805461083f90612bbe565b5f3381610d298286611201565b905083811015610d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a9a565b610d9682868684036112d8565b506001949350505050565b5f336108cd818585611640565b610db66117d6565b610b3e610dc38284612d13565b611aca565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610dfb90612bbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2790612bbe565b8015610e725780601f10610e4957610100808354040283529160200191610e72565b820191905f5260205f20905b815481529060010190602001808311610e5557829003601f168201915b5050505050905080515f03610ec05783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610cf79350505050565b5f839003610ecf579050610cf7565b60028310610f4c57610f1584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bcb92505050565b80610f238460028188612e34565b604051602001610f3593929190612e5b565b604051602081830303815290604052915050610cf7565b8383604051639a6d49cd60e01b8152600401610a9a929190612ea9565b5f5b818110156110565736838383818110610f8657610f86612ebc565b9050602002810190610f989190612ed0565b9050610fb4610faa6020830183612a5f565b6020830135610c5e565b610fbe575061104e565b3063d045a0dc60c08301358360a0810135610fdd610100830183612eef565b610fee610100890160e08a01612964565b610ffc6101208a018a612eef565b6040518963ffffffff1660e01b815260040161101e9796959493929190612f45565b5f604051808303818588803b158015611035575f5ffd5b505af1158015611047573d5f5f3e3d5ffd5b5050505050505b600101610f6b565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611092573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110b99190810190612fca565b604051638351eea760e01b8152600401610a9a9190612611565b6110db6125a1565b6110e3612589565b6110ee858585611bf7565b915091505b935093915050565b6111036117d6565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e19061114f908490600401612747565b5f604051808303815f87803b158015611166575f5ffd5b505af1158015611178573d5f5f3e3d5ffd5b5050505050565b33301461119f5760405163029a949d60e31b815260040160405180910390fd5b610afe87878787878787610aef565b6111b66117d6565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090610ccc908390612747565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b6112336117d6565b6001600160a01b0381166112985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9a565b6112a181611a7b565b50565b5f6020820180359060019083906112bb9086612a5f565b63ffffffff16815260208101919091526040015f20541492915050565b6001600160a01b03831661133a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a9a565b6001600160a01b03821661139b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a9a565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f5f61140685611ce4565b9150819050838110156110f3576040516371c4efed60e01b81526004810182905260248101859052604401610a9a565b63ffffffff81165f90815260016020526040812054806108d35760405163f6ff4fb760e01b815263ffffffff84166004820152602401610a9a565b5f61148261147f8787611d1a565b90565b90505f6114ad8261149b6114968a8a611d31565b611d53565b6114a860208d018d612a5f565b611d87565b9050602886111561156d575f6114e96114cc60608c0160408d01613032565b6114d960208d018d612a5f565b846114e48c8c611dae565b611df8565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061153e9086908d905f90879060040161304d565b5f604051808303815f87803b158015611555575f5ffd5b505af1158015611567573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6115a660208d018d612a5f565b846040516115b5929190612c36565b60405180910390a3505050505050505050565b5f6115d38484611201565b90505f19811461163a578181101561162d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a9a565b61163a84848484036112d8565b50505050565b6001600160a01b0383166116a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a9a565b6001600160a01b0382166117065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a9a565b6001600160a01b0383165f908152600560205260409020548181101561177d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a9a565b6001600160a01b038085165f8181526005602052604080822086860390559286168082529083902080548601905591515f5160206134b15f395f51905f52906117c99086815260200190565b60405180910390a361163a565b336117df610cff565b6001600160a01b031614610ce85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a9a565b63ffffffff82165f9081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9061187e9084908490612c36565b60405180910390a15050565b6060805f6118e5856020013561189f86611e2f565b6118ac60a0890189612eef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e5a92505050565b90935090505f816118f75760016118fa565b60025b905061191a61190c6020880188612a5f565b826106e360808a018a612eef565b6004549093506001600160a01b0316801561199e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061195d908890889060040161307d565b602060405180830381865afa158015611978573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199c91906130a1565b505b5050509250929050565b6119b0612589565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff1681526020016119ff89611436565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611a349291906130bc565b6040805180830381865afa158015611a4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a729190613163565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611b9b57611afb828281518110611aea57611aea612ebc565b602002602001015160400151611bcb565b818181518110611b0d57611b0d612ebc565b60200260200101516040015160035f848481518110611b2e57611b2e612ebc565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611b6557611b65612ebc565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611b9291906131c1565b50600101611acc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610ccc919061327b565b600281015161ffff8116600314610b3e5781604051639a6d49cd60e01b8152600401610a9a9190612611565b611bff6125a1565b611c07612589565b5f80611c2933604089013560608a0135611c2460208c018c612a5f565b611ed4565b915091505f5f611c39898461188a565b9092509050611c65611c4e60208b018b612a5f565b8383611c5f368d90038d018d613309565b8b611ef9565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611cb3908d018d612a5f565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611d10818461333a565b6108d39190613359565b5f611d286020828486612e34565b610b2591613370565b5f611d40602860208486612e34565b611d499161338d565b60c01c9392505050565b5f6108d37f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416613359565b5f6001600160a01b038416611d9c5761dead93505b611da6848461200f565b509092915050565b6060611dbd8260288186612e34565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611e1194939291906133c5565b6040516020818303038152906040529050949350505050565b505050565b5f6108d37f00000000000000000000000000000000000000000000000000000000000000008361333a565b8051606090151580611ea3578484604051602001611e8f92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611eca565b84843385604051602001611eba9493929190613416565b6040516020818303038152906040525b9150935093915050565b5f5f611ee18585856113fb565b9092509050611ef086836120bb565b94509492505050565b611f016125a1565b3415611f2257604051637693b46f60e01b8152346004820152602401610a9a565b8251611f2d906121da565b50602083015115611f4557611f45836020015161227b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a4506040518060a001604052808963ffffffff168152602001611f948a611436565b81526020018881526020018781526020015f8760200151111515815250846040518363ffffffff1660e01b8152600401611fcf9291906130bc565b6080604051808303815f875af1158015611feb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb29190613455565b6001600160a01b0382166120655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a9a565b8060075f8282546120769190612c60565b90915550506001600160a01b0382165f818152600560209081526040808320805486019055518481525f5160206134b15f395f51905f52910160405180910390a35050565b6001600160a01b03821661211b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a9a565b6001600160a01b0382165f908152600560205260409020548181101561218e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a9a565b6001600160a01b0383165f8181526005602090815260408083208686039055600780548790039055518581529192915f5160206134b15f395f51905f52910160405180910390a3505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661222257604051638dce522760e01b815260040160405180910390fd5b6122776001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f000000000000000000000000000000000000000000000000000000000000000085612356565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122fc9190612bf0565b90506001600160a01b038116612325576040516329b99a9560e11b815260040160405180910390fd5b610b3e6001600160a01b038216337f0000000000000000000000000000000000000000000000000000000000000000855b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092018352602080830180516001600160e01b03166323b872dd60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261163a928792915f916123ed91851690849061246c565b905080515f148061240d57508080602001905181019061240d91906130a1565b611e2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a9a565b6060610cf784845f85855f5f866001600160a01b03168587604051612491919061349f565b5f6040518083038185875af1925050503d805f81146124cb576040519150601f19603f3d011682016040523d82523d5f602084013e6124d0565b606091505b50915091506124e1878383876124ec565b979650505050505050565b6060831561255a5782515f03612553576001600160a01b0385163b6125535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a9a565b5081610cf7565b610cf7838381511561256f5781518083602001fd5b8060405162461bcd60e51b8152600401610a9a9190612611565b60405180604001604052805f81526020015f81525090565b604080516060810182525f80825260208201529081016125bf612589565b905290565b5f5b838110156125de5781810151838201526020016125c6565b50505f910152565b5f81518084526125fd8160208601602086016125c4565b601f01601f19169290920160200192915050565b602081525f610b2560208301846125e6565b6001600160a01b03811681146112a1575f5ffd5b5f5f60408385031215612648575f5ffd5b823561265381612623565b946020939093013593505050565b5f60e08284031215612671575f5ffd5b50919050565b5f60208284031215612687575f5ffd5b81356001600160401b0381111561269c575f5ffd5b610cf784828501612661565b80518252602090810151910152565b5f60a082016126c683876126a8565b60a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156127325760bf19878603018452815180518652602081015190506040602087015261271c60408701826125e6565b95505060209384019391909101906001016126ea565b5050505080915050610cf760608301846126a8565b6001600160a01b0391909116815260200190565b5f60608284031215612671575f5ffd5b5f5f83601f84011261277b575f5ffd5b5081356001600160401b03811115612791575f5ffd5b6020830191508360208285010111156127a8575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a0312156127c5575f5ffd5b6127cf898961275b565b96506060880135955060808801356001600160401b038111156127f0575f5ffd5b6127fc8a828b0161276b565b90965094505060a088013561281081612623565b925060c08801356001600160401b0381111561282a575f5ffd5b6128368a828b0161276b565b989b979a50959850939692959293505050565b5f5f5f6060848603121561285b575f5ffd5b833561286681612623565b9250602084013561287681612623565b929592945050506040919091013590565b803563ffffffff8116811461289a575f5ffd5b919050565b5f5f604083850312156128b0575f5ffd5b61265383612887565b80151581146112a1575f5ffd5b5f5f604083850312156128d7575f5ffd5b82356001600160401b038111156128ec575f5ffd5b6128f885828601612661565b9250506020830135612909816128b9565b809150509250929050565b604081016108d382846126a8565b803561ffff8116811461289a575f5ffd5b5f5f60408385031215612944575f5ffd5b61294d83612887565b915061295b60208401612922565b90509250929050565b5f60208284031215612974575f5ffd5b8135610b2581612623565b5f5f5f5f60a08587031215612992575f5ffd5b61299c868661275b565b935060608501356001600160401b038111156129b6575f5ffd5b6129c28782880161276b565b90945092505060808501356129d681612623565b939692955090935050565b5f5f83601f8401126129f1575f5ffd5b5081356001600160401b03811115612a07575f5ffd5b6020830191508360208260051b85010111156127a8575f5ffd5b5f5f60208385031215612a32575f5ffd5b82356001600160401b03811115612a47575f5ffd5b612a53858286016129e1565b90969095509350505050565b5f60208284031215612a6f575f5ffd5b610b2582612887565b5f5f5f5f60608587031215612a8b575f5ffd5b612a9485612887565b9350612aa260208601612922565b925060408501356001600160401b03811115612abc575f5ffd5b612ac88782880161276b565b95989497509550505050565b5f5f5f8385036080811215612ae7575f5ffd5b84356001600160401b03811115612afc575f5ffd5b612b0887828801612661565b9450506040601f1982011215612b1c575f5ffd5b506020840191506060840135612b3181612623565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c0830191612b6a908401826126a8565b50610b2560808301846126a8565b5f5f60408385031215612b89575f5ffd5b8235612b9481612623565b9150602083013561290981612623565b5f60608284031215612bb4575f5ffd5b610b25838361275b565b600181811c90821680612bd257607f821691505b60208210810361267157634e487b7160e01b5f52602260045260245ffd5b5f60208284031215612c00575f5ffd5b8151610b2581612623565b5f60208284031215612c1b575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108d3576108d3612c4c565b604051606081016001600160401b0381118282101715612c9557612c95612c22565b60405290565b604080519081016001600160401b0381118282101715612c9557612c95612c22565b604051601f8201601f191681016001600160401b0381118282101715612ce557612ce5612c22565b604052919050565b5f6001600160401b03821115612d0557612d05612c22565b50601f01601f191660200190565b5f6001600160401b03831115612d2b57612d2b612c22565b8260051b612d3b60208201612cbd565b84815290830190602081019036831115612d53575f5ffd5b845b83811015612e2a5780356001600160401b03811115612d72575f5ffd5b86016060368290031215612d84575f5ffd5b612d8c612c73565b612d9582612887565b8152612da360208301612922565b602082015260408201356001600160401b03811115612dc0575f5ffd5b919091019036601f830112612dd3575f5ffd5b8135612de6612de182612ced565b612cbd565b818152366020838601011115612dfa575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050612d55565b5095945050505050565b5f5f85851115612e42575f5ffd5b83861115612e4e575f5ffd5b5050820193919092039150565b5f8451612e6c8184602089016125c4565b8201838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610cf7602083018486612e81565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e19833603018112612ee5575f5ffd5b9190910192915050565b5f5f8335601e19843603018112612f04575f5ffd5b8301803591506001600160401b03821115612f1d575f5ffd5b6020019150368190038213156127a8575f5ffd5b6001600160401b03811681146112a1575f5ffd5b63ffffffff612f5389612887565b168152602088810135908201525f6040890135612f6f81612f31565b6001600160401b031660408301526060820188905260e060808301819052612f9a9083018789612e81565b6001600160a01b03861660a084015282810360c0840152612fbc818587612e81565b9a9950505050505050505050565b5f60208284031215612fda575f5ffd5b81516001600160401b03811115612fef575f5ffd5b8201601f81018413612fff575f5ffd5b805161300d612de182612ced565b818152856020838501011115613021575f5ffd5b611a728260208301602086016125c4565b5f60208284031215613042575f5ffd5b8135610b2581612f31565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f610bb260808301846125e6565b604081525f61308f60408301856125e6565b8281036020840152611a7281856125e6565b5f602082840312156130b1575f5ffd5b8151610b25816128b9565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526130f160e08401826125e6565b90506060850151603f198483030160a085015261310e82826125e6565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215613144575f5ffd5b61314c612c9b565b825181526020928301519281019290925250919050565b5f60408284031215613173575f5ffd5b610b258383613134565b601f821115611e2a57805f5260205f20601f840160051c810160208510156131a25750805b601f840160051c820191505b81811015611178575f81556001016131ae565b81516001600160401b038111156131da576131da612c22565b6131ee816131e88454612bbe565b8461317d565b6020601f821160018114613220575f83156132095750848201515b5f19600385901b1c1916600184901b178455611178565b5f84815260208120601f198516915b8281101561324f578785015182556020948501946001909201910161322f565b508482101561326c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156132fd57603f19878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526132e760608701826125e6565b95505060209384019391909101906001016132a1565b50929695505050505050565b5f604082840312801561331a575f5ffd5b50613323612c9b565b823581526020928301359281019290925250919050565b5f8261335457634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108d3576108d3612c4c565b803560208310156108d3575f19602084900360031b1b1692915050565b80356001600160c01b031981169060088410156133be576001600160c01b0319600885900360031b81901b82161691505b5092915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c810183905281515f9061340681602c8501602087016125c4565b91909101602c0195945050505050565b84815260018060c01b03198460c01b1660208201528260288201525f82516134458160488501602087016125c4565b9190910160480195945050505050565b5f6080828403128015613466575f5ffd5b5061346f612c73565b82518152602083015161348181612f31565b60208201526134938460408501613134565b60408201529392505050565b5f8251612ee58184602087016125c456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220592a08eb2917132e800cb29e8248271d95ede5e49e281585897b87ca2479c50d64736f6c634300081e0033",
  "deployedBytecode": "0x60806040526004361061020c575f3560e01c806306fdde0314610210578063095ea7b31461023a5780630d35b41514610269578063111ecdad1461029757806313137d65146102c3578063134d4f25146102d8578063156a0d0f146102ff57806317442b701461032557806318160ddd146103465780631f5e13341461036457806323b872dd14610378578063313ce567146103975780633400288b146103d757806339509351146103f65780633b6f743b1461041557806352ae2879146104415780635535d461146104535780635a0dfe4d146104725780635e280f11146104915780636fc1b31e146104c457806370a08231146104e3578063715018a6146105175780637d25a05e1461052b57806382413eac14610564578063857749b0146105835780638da5cb5b146105b557806395d89b41146105c9578063963efcaa146105dd5780639f68b96414610610578063a457c2d714610622578063a9059cbb14610641578063b731ea0a14610660578063b98bd0701461067f578063bb0b6a531461069e578063bc70b354146106c9578063bd815db0146106e8578063c7c7f5b3146106fb578063ca5eb5e11461071c578063d045a0dc1461073b578063d42438851461074e578063dd62ed3e1461076d578063e1758bd81461078c578063e184c9be146107bf578063f2fde38b146107f2578063fc0c546a14610441578063ff7bd03d14610811575b5f5ffd5b34801561021b575f5ffd5b50610224610830565b6040516102319190612611565b60405180910390f35b348015610245575f5ffd5b50610259610254366004612637565b6108c0565b6040519015158152602001610231565b348015610274575f5ffd5b50610288610283366004612677565b6108d9565b604051610231939291906126b7565b3480156102a2575f5ffd5b506004546102b6906001600160a01b031681565b6040516102319190612747565b6102d66102d13660046127af565b610a4f565b005b3480156102e3575f5ffd5b506102ec600281565b60405161ffff9091168152602001610231565b34801561030a575f5ffd5b506040805162b9270b60e21b81526001602082015201610231565b348015610330575f5ffd5b5060408051600181526002602082015201610231565b348015610351575f5ffd5b506007545b604051908152602001610231565b34801561036f575f5ffd5b506102ec600181565b348015610383575f5ffd5b50610259610392366004612849565b610b07565b3480156103a2575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405160ff9091168152602001610231565b3480156103e2575f5ffd5b506102d66103f136600461289f565b610b2c565b348015610401575f5ffd5b50610259610410366004612637565b610b42565b348015610420575f5ffd5b5061043461042f3660046128c6565b610b63565b6040516102319190612914565b34801561044c575f5ffd5b50306102b6565b34801561045e575f5ffd5b5061022461046d366004612933565b610bbc565b34801561047d575f5ffd5b5061025961048c36600461289f565b610c5e565b34801561049c575f5ffd5b506102b67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cf575f5ffd5b506102d66104de366004612964565b610c79565b3480156104ee575f5ffd5b506103566104fd366004612964565b6001600160a01b03165f9081526005602052604090205490565b348015610522575f5ffd5b506102d6610cd7565b348015610536575f5ffd5b5061054c61054536600461289f565b5f92915050565b6040516001600160401b039091168152602001610231565b34801561056f575f5ffd5b5061025961057e36600461297f565b610cea565b34801561058e575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006103c5565b3480156105c0575f5ffd5b506102b6610cff565b3480156105d4575f5ffd5b50610224610d0d565b3480156105e8575f5ffd5b506103567f000000000000000000000000000000000000000000000000000000000000000081565b34801561061b575f5ffd5b505f610259565b34801561062d575f5ffd5b5061025961063c366004612637565b610d1c565b34801561064c575f5ffd5b5061025961065b366004612637565b610da1565b34801561066b575f5ffd5b506002546102b6906001600160a01b031681565b34801561068a575f5ffd5b506102d6610699366004612a21565b610dae565b3480156106a9575f5ffd5b506103566106b8366004612a5f565b60016020525f908152604090205481565b3480156106d4575f5ffd5b506102246106e3366004612a78565b610dc8565b6102d66106f6366004612a21565b610f69565b61070e610709366004612ad4565b6110d3565b604051610231929190612b3c565b348015610727575f5ffd5b506102d6610736366004612964565b6110fb565b6102d66107493660046127af565b61117f565b348015610759575f5ffd5b506102d6610768366004612964565b6111ae565b348015610778575f5ffd5b50610356610787366004612b78565b611201565b348015610797575f5ffd5b506102b67f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ca575f5ffd5b506103567f000000000000000000000000000000000000000000000000000000000000000081565b3480156107fd575f5ffd5b506102d661080c366004612964565b61122b565b34801561081c575f5ffd5b5061025961082b366004612ba4565b6112a4565b60606008805461083f90612bbe565b80601f016020809104026020016040519081016040528092919081815260200182805461086b90612bbe565b80156108b65780601f1061088d576101008083540402835291602001916108b6565b820191905f5260205f20905b81548152906001019060200180831161089957829003601f168201915b5050505050905090565b5f336108cd8185856112d8565b60019150505b92915050565b604080518082019091525f808252602082015260606108f6612589565b5f5f90505f306001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610937573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095b9190612bf0565b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610996573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ba9190612c0b565b604080518082018252848152602080820184905282515f80825291810190935290975091925090610a0d565b604080518082019091525f8152606060208201528152602001906001900390816109e65790505b5093505f80610a31604089013560608a0135610a2c60208c018c612a5f565b6113fb565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610aa357336040516391ac5e4f60e01b8152600401610a9a9190612747565b60405180910390fd5b60208701803590610abd90610ab8908a612a5f565b611436565b14610aef57610acf6020880188612a5f565b876020013560405163309afaf360e21b8152600401610a9a929190612c36565b610afe87878787878787611471565b50505050505050565b5f33610b148582856115c8565b610b1f858585611640565b60019150505b9392505050565b610b346117d6565b610b3e8282611835565b5050565b5f336108cd818585610b548383611201565b610b5e9190612c60565b6112d8565b610b6b612589565b5f610b8660408501356060860135610a2c6020880188612a5f565b9150505f5f610b95868461188a565b9092509050610bb2610baa6020880188612a5f565b8383886119a8565b9695505050505050565b600360209081525f928352604080842090915290825290208054610bdf90612bbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0b90612bbe565b8015610c565780601f10610c2d57610100808354040283529160200191610c56565b820191905f5260205f20905b815481529060010190602001808311610c3957829003601f168201915b505050505081565b63ffffffff919091165f908152600160205260409020541490565b610c816117d6565b600480546001600160a01b0319166001600160a01b0383161790556040517ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419790610ccc908390612747565b60405180910390a150565b610cdf6117d6565b610ce85f611a7b565b565b6001600160a01b03811630145b949350505050565b5f546001600160a01b031690565b60606009805461083f90612bbe565b5f3381610d298286611201565b905083811015610d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a9a565b610d9682868684036112d8565b506001949350505050565b5f336108cd818585611640565b610db66117d6565b610b3e610dc38284612d13565b611aca565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610dfb90612bbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2790612bbe565b8015610e725780601f10610e4957610100808354040283529160200191610e72565b820191905f5260205f20905b815481529060010190602001808311610e5557829003601f168201915b5050505050905080515f03610ec05783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610cf79350505050565b5f839003610ecf579050610cf7565b60028310610f4c57610f1584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bcb92505050565b80610f238460028188612e34565b604051602001610f3593929190612e5b565b604051602081830303815290604052915050610cf7565b8383604051639a6d49cd60e01b8152600401610a9a929190612ea9565b5f5b818110156110565736838383818110610f8657610f86612ebc565b9050602002810190610f989190612ed0565b9050610fb4610faa6020830183612a5f565b6020830135610c5e565b610fbe575061104e565b3063d045a0dc60c08301358360a0810135610fdd610100830183612eef565b610fee610100890160e08a01612964565b610ffc6101208a018a612eef565b6040518963ffffffff1660e01b815260040161101e9796959493929190612f45565b5f604051808303818588803b158015611035575f5ffd5b505af1158015611047573d5f5f3e3d5ffd5b5050505050505b600101610f6b565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611092573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110b99190810190612fca565b604051638351eea760e01b8152600401610a9a9190612611565b6110db6125a1565b6110e3612589565b6110ee858585611bf7565b915091505b935093915050565b6111036117d6565b60405163ca5eb5e160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e19061114f908490600401612747565b5f604051808303815f87803b158015611166575f5ffd5b505af1158015611178573d5f5f3e3d5ffd5b5050505050565b33301461119f5760405163029a949d60e31b815260040160405180910390fd5b610afe87878787878787610aef565b6111b66117d6565b600280546001600160a01b0319166001600160a01b0383161790556040517fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090610ccc908390612747565b6001600160a01b039182165f90815260066020908152604080832093909416825291909152205490565b6112336117d6565b6001600160a01b0381166112985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a9a565b6112a181611a7b565b50565b5f6020820180359060019083906112bb9086612a5f565b63ffffffff16815260208101919091526040015f20541492915050565b6001600160a01b03831661133a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a9a565b6001600160a01b03821661139b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a9a565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f5f61140685611ce4565b9150819050838110156110f3576040516371c4efed60e01b81526004810182905260248101859052604401610a9a565b63ffffffff81165f90815260016020526040812054806108d35760405163f6ff4fb760e01b815263ffffffff84166004820152602401610a9a565b5f61148261147f8787611d1a565b90565b90505f6114ad8261149b6114968a8a611d31565b611d53565b6114a860208d018d612a5f565b611d87565b9050602886111561156d575f6114e96114cc60608c0160408d01613032565b6114d960208d018d612a5f565b846114e48c8c611dae565b611df8565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061153e9086908d905f90879060040161304d565b5f604051808303815f87803b158015611555575f5ffd5b505af1158015611567573d5f5f3e3d5ffd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6115a660208d018d612a5f565b846040516115b5929190612c36565b60405180910390a3505050505050505050565b5f6115d38484611201565b90505f19811461163a578181101561162d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a9a565b61163a84848484036112d8565b50505050565b6001600160a01b0383166116a45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a9a565b6001600160a01b0382166117065760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a9a565b6001600160a01b0383165f908152600560205260409020548181101561177d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a9a565b6001600160a01b038085165f8181526005602052604080822086860390559286168082529083902080548601905591515f5160206134b15f395f51905f52906117c99086815260200190565b60405180910390a361163a565b336117df610cff565b6001600160a01b031614610ce85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a9a565b63ffffffff82165f9081526001602052604090819020829055517f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9061187e9084908490612c36565b60405180910390a15050565b6060805f6118e5856020013561189f86611e2f565b6118ac60a0890189612eef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e5a92505050565b90935090505f816118f75760016118fa565b60025b905061191a61190c6020880188612a5f565b826106e360808a018a612eef565b6004549093506001600160a01b0316801561199e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061195d908890889060040161307d565b602060405180830381865afa158015611978573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199c91906130a1565b505b5050509250929050565b6119b0612589565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff1681526020016119ff89611436565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611a349291906130bc565b6040805180830381865afa158015611a4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a729190613163565b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5b8151811015611b9b57611afb828281518110611aea57611aea612ebc565b602002602001015160400151611bcb565b818181518110611b0d57611b0d612ebc565b60200260200101516040015160035f848481518110611b2e57611b2e612ebc565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611b6557611b65612ebc565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611b9291906131c1565b50600101611acc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610ccc919061327b565b600281015161ffff8116600314610b3e5781604051639a6d49cd60e01b8152600401610a9a9190612611565b611bff6125a1565b611c07612589565b5f80611c2933604089013560608a0135611c2460208c018c612a5f565b611ed4565b915091505f5f611c39898461188a565b9092509050611c65611c4e60208b018b612a5f565b8383611c5f368d90038d018d613309565b8b611ef9565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611cb3908d018d612a5f565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b5f7f0000000000000000000000000000000000000000000000000000000000000000611d10818461333a565b6108d39190613359565b5f611d286020828486612e34565b610b2591613370565b5f611d40602860208486612e34565b611d499161338d565b60c01c9392505050565b5f6108d37f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416613359565b5f6001600160a01b038416611d9c5761dead93505b611da6848461200f565b509092915050565b6060611dbd8260288186612e34565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b606084848484604051602001611e1194939291906133c5565b6040516020818303038152906040529050949350505050565b505050565b5f6108d37f00000000000000000000000000000000000000000000000000000000000000008361333a565b8051606090151580611ea3578484604051602001611e8f92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611eca565b84843385604051602001611eba9493929190613416565b6040516020818303038152906040525b9150935093915050565b5f5f611ee18585856113fb565b9092509050611ef086836120bb565b94509492505050565b611f016125a1565b3415611f2257604051637693b46f60e01b8152346004820152602401610a9a565b8251611f2d906121da565b50602083015115611f4557611f45836020015161227b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a4506040518060a001604052808963ffffffff168152602001611f948a611436565b81526020018881526020018781526020015f8760200151111515815250846040518363ffffffff1660e01b8152600401611fcf9291906130bc565b6080604051808303815f875af1158015611feb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb29190613455565b6001600160a01b0382166120655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a9a565b8060075f8282546120769190612c60565b90915550506001600160a01b0382165f818152600560209081526040808320805486019055518481525f5160206134b15f395f51905f52910160405180910390a35050565b6001600160a01b03821661211b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a9a565b6001600160a01b0382165f908152600560205260409020548181101561218e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a9a565b6001600160a01b0383165f8181526005602090815260408083208686039055600780548790039055518581529192915f5160206134b15f395f51905f52910160405180910390a3505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661222257604051638dce522760e01b815260040160405180910390fd5b6122776001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f000000000000000000000000000000000000000000000000000000000000000085612356565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122fc9190612bf0565b90506001600160a01b038116612325576040516329b99a9560e11b815260040160405180910390fd5b610b3e6001600160a01b038216337f0000000000000000000000000000000000000000000000000000000000000000855b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092018352602080830180516001600160e01b03166323b872dd60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261163a928792915f916123ed91851690849061246c565b905080515f148061240d57508080602001905181019061240d91906130a1565b611e2a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a9a565b6060610cf784845f85855f5f866001600160a01b03168587604051612491919061349f565b5f6040518083038185875af1925050503d805f81146124cb576040519150601f19603f3d011682016040523d82523d5f602084013e6124d0565b606091505b50915091506124e1878383876124ec565b979650505050505050565b6060831561255a5782515f03612553576001600160a01b0385163b6125535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a9a565b5081610cf7565b610cf7838381511561256f5781518083602001fd5b8060405162461bcd60e51b8152600401610a9a9190612611565b60405180604001604052805f81526020015f81525090565b604080516060810182525f80825260208201529081016125bf612589565b905290565b5f5b838110156125de5781810151838201526020016125c6565b50505f910152565b5f81518084526125fd8160208601602086016125c4565b601f01601f19169290920160200192915050565b602081525f610b2560208301846125e6565b6001600160a01b03811681146112a1575f5ffd5b5f5f60408385031215612648575f5ffd5b823561265381612623565b946020939093013593505050565b5f60e08284031215612671575f5ffd5b50919050565b5f60208284031215612687575f5ffd5b81356001600160401b0381111561269c575f5ffd5b610cf784828501612661565b80518252602090810151910152565b5f60a082016126c683876126a8565b60a0604084015280855180835260c08501915060c08160051b8601019250602087015f5b828110156127325760bf19878603018452815180518652602081015190506040602087015261271c60408701826125e6565b95505060209384019391909101906001016126ea565b5050505080915050610cf760608301846126a8565b6001600160a01b0391909116815260200190565b5f60608284031215612671575f5ffd5b5f5f83601f84011261277b575f5ffd5b5081356001600160401b03811115612791575f5ffd5b6020830191508360208285010111156127a8575f5ffd5b9250929050565b5f5f5f5f5f5f5f60e0888a0312156127c5575f5ffd5b6127cf898961275b565b96506060880135955060808801356001600160401b038111156127f0575f5ffd5b6127fc8a828b0161276b565b90965094505060a088013561281081612623565b925060c08801356001600160401b0381111561282a575f5ffd5b6128368a828b0161276b565b989b979a50959850939692959293505050565b5f5f5f6060848603121561285b575f5ffd5b833561286681612623565b9250602084013561287681612623565b929592945050506040919091013590565b803563ffffffff8116811461289a575f5ffd5b919050565b5f5f604083850312156128b0575f5ffd5b61265383612887565b80151581146112a1575f5ffd5b5f5f604083850312156128d7575f5ffd5b82356001600160401b038111156128ec575f5ffd5b6128f885828601612661565b9250506020830135612909816128b9565b809150509250929050565b604081016108d382846126a8565b803561ffff8116811461289a575f5ffd5b5f5f60408385031215612944575f5ffd5b61294d83612887565b915061295b60208401612922565b90509250929050565b5f60208284031215612974575f5ffd5b8135610b2581612623565b5f5f5f5f60a08587031215612992575f5ffd5b61299c868661275b565b935060608501356001600160401b038111156129b6575f5ffd5b6129c28782880161276b565b90945092505060808501356129d681612623565b939692955090935050565b5f5f83601f8401126129f1575f5ffd5b5081356001600160401b03811115612a07575f5ffd5b6020830191508360208260051b85010111156127a8575f5ffd5b5f5f60208385031215612a32575f5ffd5b82356001600160401b03811115612a47575f5ffd5b612a53858286016129e1565b90969095509350505050565b5f60208284031215612a6f575f5ffd5b610b2582612887565b5f5f5f5f60608587031215612a8b575f5ffd5b612a9485612887565b9350612aa260208601612922565b925060408501356001600160401b03811115612abc575f5ffd5b612ac88782880161276b565b95989497509550505050565b5f5f5f8385036080811215612ae7575f5ffd5b84356001600160401b03811115612afc575f5ffd5b612b0887828801612661565b9450506040601f1982011215612b1c575f5ffd5b506020840191506060840135612b3181612623565b809150509250925092565b825181526020808401516001600160401b03169082015260408084015160c0830191612b6a908401826126a8565b50610b2560808301846126a8565b5f5f60408385031215612b89575f5ffd5b8235612b9481612623565b9150602083013561290981612623565b5f60608284031215612bb4575f5ffd5b610b25838361275b565b600181811c90821680612bd257607f821691505b60208210810361267157634e487b7160e01b5f52602260045260245ffd5b5f60208284031215612c00575f5ffd5b8151610b2581612623565b5f60208284031215612c1b575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff929092168252602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156108d3576108d3612c4c565b604051606081016001600160401b0381118282101715612c9557612c95612c22565b60405290565b604080519081016001600160401b0381118282101715612c9557612c95612c22565b604051601f8201601f191681016001600160401b0381118282101715612ce557612ce5612c22565b604052919050565b5f6001600160401b03821115612d0557612d05612c22565b50601f01601f191660200190565b5f6001600160401b03831115612d2b57612d2b612c22565b8260051b612d3b60208201612cbd565b84815290830190602081019036831115612d53575f5ffd5b845b83811015612e2a5780356001600160401b03811115612d72575f5ffd5b86016060368290031215612d84575f5ffd5b612d8c612c73565b612d9582612887565b8152612da360208301612922565b602082015260408201356001600160401b03811115612dc0575f5ffd5b919091019036601f830112612dd3575f5ffd5b8135612de6612de182612ced565b612cbd565b818152366020838601011115612dfa575f5ffd5b816020850160208301375f6020838301015280604084015250508085525050602083019250602081019050612d55565b5095945050505050565b5f5f85851115612e42575f5ffd5b83861115612e4e575f5ffd5b5050820193919092039150565b5f8451612e6c8184602089016125c4565b8201838582375f930192835250909392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610cf7602083018486612e81565b634e487b7160e01b5f52603260045260245ffd5b5f823561013e19833603018112612ee5575f5ffd5b9190910192915050565b5f5f8335601e19843603018112612f04575f5ffd5b8301803591506001600160401b03821115612f1d575f5ffd5b6020019150368190038213156127a8575f5ffd5b6001600160401b03811681146112a1575f5ffd5b63ffffffff612f5389612887565b168152602088810135908201525f6040890135612f6f81612f31565b6001600160401b031660408301526060820188905260e060808301819052612f9a9083018789612e81565b6001600160a01b03861660a084015282810360c0840152612fbc818587612e81565b9a9950505050505050505050565b5f60208284031215612fda575f5ffd5b81516001600160401b03811115612fef575f5ffd5b8201601f81018413612fff575f5ffd5b805161300d612de182612ced565b818152856020838501011115613021575f5ffd5b611a728260208301602086016125c4565b5f60208284031215613042575f5ffd5b8135610b2581612f31565b60018060a01b038516815283602082015261ffff83166040820152608060608201525f610bb260808301846125e6565b604081525f61308f60408301856125e6565b8281036020840152611a7281856125e6565b5f602082840312156130b1575f5ffd5b8151610b25816128b9565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a060808401526130f160e08401826125e6565b90506060850151603f198483030160a085015261310e82826125e6565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215613144575f5ffd5b61314c612c9b565b825181526020928301519281019290925250919050565b5f60408284031215613173575f5ffd5b610b258383613134565b601f821115611e2a57805f5260205f20601f840160051c810160208510156131a25750805b601f840160051c820191505b81811015611178575f81556001016131ae565b81516001600160401b038111156131da576131da612c22565b6131ee816131e88454612bbe565b8461317d565b6020601f821160018114613220575f83156132095750848201515b5f19600385901b1c1916600184901b178455611178565b5f84815260208120601f198516915b8281101561324f578785015182556020948501946001909201910161322f565b508482101561326c57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156132fd57603f19878603018452815163ffffffff815116865261ffff602082015116602087015260408101519050606060408701526132e760608701826125e6565b95505060209384019391909101906001016132a1565b50929695505050505050565b5f604082840312801561331a575f5ffd5b50613323612c9b565b823581526020928301359281019290925250919050565b5f8261335457634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108d3576108d3612c4c565b803560208310156108d3575f19602084900360031b1b1692915050565b80356001600160c01b031981169060088410156133be576001600160c01b0319600885900360031b81901b82161691505b5092915050565b60c085901b6001600160c01b031916815260e084901b6001600160e01b0319166008820152600c810183905281515f9061340681602c8501602087016125c4565b91909101602c0195945050505050565b84815260018060c01b03198460c01b1660208201528260288201525f82516134458160488501602087016125c4565b9190910160480195945050505050565b5f6080828403128015613466575f5ffd5b5061346f612c73565b82518152602083015161348181612f31565b60208201526134938460408501613134565b60408201529392505050565b5f8251612ee58184602087016125c456feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220592a08eb2917132e800cb29e8248271d95ede5e49e281585897b87ca2479c50d64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
