{
  "_format": "hh-sol-artifact-1",
  "contractName": "L1CrossDomainMessenger",
  "sourceName": "contracts/L1/messaging/L1CrossDomainMessenger.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "FailedRelayedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_xDomainCalldataHash",
          "type": "bytes32"
        }
      ],
      "name": "MessageAllowed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "_xDomainCalldataHash",
          "type": "bytes32"
        }
      ],
      "name": "MessageBlocked",
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "RelayedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "messageNonce",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "SentMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_xDomainCalldataHash",
          "type": "bytes32"
        }
      ],
      "name": "allowMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_xDomainCalldataHash",
          "type": "bytes32"
        }
      ],
      "name": "blockMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "blockedMessages",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_libAddressManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "libAddressManager",
      "outputs": [
        {
          "internalType": "contract Lib_AddressManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_messageNonce",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "batchIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "batchRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "batchSize",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "prevTotalElements",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "extraData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
              "name": "stateRootBatchHeader",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "siblings",
                  "type": "bytes32[]"
                }
              ],
              "internalType": "struct Lib_OVMCodec.ChainInclusionProof",
              "name": "stateRootProof",
              "type": "tuple"
            },
            {
              "internalType": "bytes",
              "name": "stateTrieWitness",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "storageTrieWitness",
              "type": "bytes"
            }
          ],
          "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof",
          "name": "_proof",
          "type": "tuple"
        }
      ],
      "name": "relayMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_messageNonce",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "stateRoot",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "batchIndex",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32",
                  "name": "batchRoot",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "batchSize",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "prevTotalElements",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "extraData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
              "name": "stateRootBatchHeader",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "index",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "siblings",
                  "type": "bytes32[]"
                }
              ],
              "internalType": "struct Lib_OVMCodec.ChainInclusionProof",
              "name": "stateRootProof",
              "type": "tuple"
            },
            {
              "internalType": "bytes",
              "name": "stateTrieWitness",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "storageTrieWitness",
              "type": "bytes"
            }
          ],
          "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof",
          "name": "_proof",
          "type": "tuple"
        }
      ],
      "name": "relayMessageViaChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "relayedMessages",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_queueIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_oldGasLimit",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_newGasLimit",
          "type": "uint32"
        }
      ],
      "name": "replayMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_queueIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_oldGasLimit",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_newGasLimit",
          "type": "uint32"
        }
      ],
      "name": "replayMessageViaChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "name": "resolve",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint32",
          "name": "_gasLimit",
          "type": "uint32"
        }
      ],
      "name": "sendMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint32",
          "name": "_gasLimit",
          "type": "uint32"
        }
      ],
      "name": "sendMessageViaChainId",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "successfulMessages",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xDomainMessageSender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260cc80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b0319169055613bd1806100446000396000f3fe60806040526004361061016a5760003560e01c8063715018a6116100cb578063b1b1b2091161007f578063d7fd19dd11610059578063d7fd19dd146103be578063eac93b56146103de578063f2fde38b146103fe57600080fd5b8063b1b1b2091461033e578063c4d66de81461036e578063c6b94ab01461038e57600080fd5b80638456cb59116100b05780638456cb59146102eb5780638da5cb5b1461030057806391744b9f1461031e57600080fd5b8063715018a6146102b657806381ada46c146102cb57600080fd5b806344dd5ed6116101225780635c975abb116101075780635c975abb146102695780636e296e45146102815780636f1c8d471461029657600080fd5b806344dd5ed614610236578063461a44781461024957600080fd5b8063299ca47811610153578063299ca478146101d65780633dbb202b1461020e5780633f4ba83a1461022157600080fd5b80630ecf2eea1461016f57806321d800ec14610191575b600080fd5b34801561017b57600080fd5b5061018f61018a366004612f41565b61041e565b005b34801561019d57600080fd5b506101c16101ac366004612f41565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506000546101f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b61018f61021c3660046130ac565b610469565b34801561022d57600080fd5b5061018f61047c565b61018f61024436600461310c565b61048e565b34801561025557600080fd5b506101f6610264366004613176565b610692565b34801561027557600080fd5b5060655460ff166101c1565b34801561028d57600080fd5b506101f6610723565b3480156102a257600080fd5b5061018f6102b13660046131bf565b6107b5565b3480156102c257600080fd5b5061018f6107ce565b3480156102d757600080fd5b5061018f6102e6366004612f41565b6107e0565b3480156102f757600080fd5b5061018f610828565b34801561030c57600080fd5b506033546001600160a01b03166101f6565b34801561032a57600080fd5b5061018f61033936600461324b565b610838565b34801561034a57600080fd5b506101c1610359366004612f41565b60cb6020526000908152604090205460ff1681565b34801561037a57600080fd5b5061018f6103893660046132e2565b610a0c565b34801561039a57600080fd5b506101c16103a9366004612f41565b60c96020526000908152604090205460ff1681565b3480156103ca57600080fd5b5061018f6103d93660046134e2565b610cca565b3480156103ea57600080fd5b5061018f6103f9366004613575565b610ce9565b34801561040a57600080fd5b5061018f6104193660046132e2565b611141565b6104266111d1565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b61047761044084848461048e565b505050565b6104846111d1565b61048c61122b565b565b60006104ce6040518060400160405280601281526020017f4d564d5f446973636f756e744f7261636c650000000000000000000000000000815250610692565b6040517f9955a4b3000000000000000000000000000000000000000000000000000000008152336004820152602481018790529091506001600160a01b03821690639955a4b39034906044016000604051808303818588803b15801561053357600080fd5b505af1158015610547573d6000803e3d6000fd5b5050505050600061058c6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610692565b6040517f2538f3a8000000000000000000000000000000000000000000000000000000008152600481018890529091506000906001600160a01b03831690632538f3a890602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190613625565b9050600061062b8733888564ffffffffff1661127d565b905061063f8884838863ffffffff166112f8565b866001600160a01b03167f678d1db16886696652bddc90d68217be474de2ce959bf7383cb63eaa8c6f1afa338885898d60405161068095949392919061369c565b60405180910390a25050505050505050565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac1906106dc9085906004016136e8565b602060405180830381865afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d91906136fb565b92915050565b60cc546000906001600160a01b03167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016107a55760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060cc546001600160a01b031690565b6107c6610440878787878787610838565b505050505050565b6107d66111d1565b61048c600061138f565b6107e86111d1565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6108306111d1565b61048c6113f9565b60006108786040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610692565b6040517fa16d359a000000000000000000000000000000000000000000000000000000008152600481018a9052602481018690529091506000906001600160a01b0383169063a16d359a90604401606060405180830381865afa1580156108e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109079190613718565b905060006109178989898961127d565b905060007311110000000000000000000000000000000011113001734200000000000000000000000000000000000007878460405160200161095c949392919061377d565b604051602081830303815290604052805190602001209050826000015181146109ed5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e00000000000000000000000000000000000000000000000000606482015260840161079c565b6109ff8b85848863ffffffff166112f8565b5050505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a57575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a895750303b158015610a89575060005474010000000000000000000000000000000000000000900460ff166001145b610afb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161079c565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610b8157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6000546001600160a01b031615610c005760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e00000000000000000000000000000000000000000000606482015260840161079c565b600080546001600160a01b0384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610c4b611436565b610c536114c7565b610c5b611561565b610c636115fe565b8015610cc657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610cd2611696565b610ce26104408686868686610ce9565b5050505050565b600260975403610d3b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161079c565b6002609755610d48611696565b6000610d568686868661127d565b9050610d638782846116e9565b1515600114610dda5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e00000000000000000000000000000000000000000000000000606482015260840161079c565b8051602080830191909120600081815260cb90925260409091205460ff1615610e6b5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e000000000000000000000000000000000000000000606482015260840161079c565b600081815260c9602052604090205460ff1615610ef05760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e000000000000000000000000000000000000000000000000000000000000606482015260840161079c565b610f2e6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610692565b6001600160a01b0316876001600160a01b031603610fb45760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e00000000000000000000000000606482015260840161079c565b60cc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03888116919091179091556040516000918916906110009088906137b5565b6000604051808303816000865af19150503d806000811461103d576040519150601f19603f3d011682016040523d82523d6000602084013e611042565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110bd57600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26110e9565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b6000833343604051602001611100939291906137d1565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff1916600190811790915560975550505050505050505050565b6111496111d1565b6001600160a01b0381166111c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161079c565b6111ce8161138f565b50565b6033546001600160a01b0316331461048c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161079c565b611233611710565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6060848484846040516024016112969493929190613823565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f511da5310000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063511da531906113579087907342000000000000000000000000000000000000079086908890600401613860565b600060405180830381600087803b15801561137157600080fd5b505af1158015611385573d6000803e3d6000fd5b5050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611401611696565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112603390565b6000547501000000000000000000000000000000000000000000900460ff1661048c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b6000547501000000000000000000000000000000000000000000900460ff166115585760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b61048c3361138f565b6000547501000000000000000000000000000000000000000000900460ff166115f25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff1661168f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b6001609755565b60655460ff161561048c5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161079c565b60006116f58483611762565b8015611706575061170683836118d1565b90505b9392505050565b60655460ff1661048c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161079c565b6000806117a36040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610692565b60208401516040517f9418bddd0000000000000000000000000000000000000000000000000000000081529192506001600160a01b03831691639418bddd916117ee916004016138cb565b602060405180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f91906138de565b1580156118c957508251602084015160408086015190517f80931e370000000000000000000000000000000000000000000000000000000081526001600160a01b038516936380931e3793611888938a93600401613900565b602060405180830381865afa1580156118a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c991906138de565b949350505050565b600080837342000000000000000000000000000000000000076040516020016118fb92919061397f565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f4200000000000000000000000000000000000000000000000000000000000000918301919091529150600090819061198b9060340160408051601f1981840301815291905260608701518751611aaf565b9150915081611a285760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a40161079c565b6000611a3382611ad8565b9050611aa484604051602001611a4b91815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611b9c565b979650505050505050565b600060606000611abe86611bc0565b9050611acb818686611bf2565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611b0583611ccd565b90506040518060800160405280611b3583600081518110611b2857611b286139c9565b6020026020010151611d00565b8152602001611b5083600181518110611b2857611b286139c9565b8152602001611b7883600281518110611b6b57611b6b6139c9565b6020026020010151611d07565b8152602001611b9383600381518110611b6b57611b6b6139c9565b90529392505050565b600080611ba886611bc0565b9050611bb681868686611e09565b9695505050505050565b60608180519060200120604051602001611bdc91815260200190565b6040516020818303038152906040529050919050565b600060606000611c0185611e3f565b90506000806000611c13848a89611f3a565b81519295509093509150158080611c275750815b611c735760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e000000000000604482015260640161079c565b600081611c8f5760405180602001604052806000815250611cbb565b611cbb86611c9e600188613a27565b81518110611cae57611cae6139c9565b60200260200101516123d0565b919b919a509098505050505050505050565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061071d906123fa565b600061071d825b6000602182600001511115611d5e5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161079c565b6000806000611d6c856125f9565b919450925090506000816001811115611d8757611d87613a3e565b14611dd45760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161079c565b6000838660200151611de69190613a6d565b80519091506020841015611bb65760208490036101000a90049695505050505050565b6000806000611e19878686611bf2565b91509150818015611aa45750805160208083019190912087519188019190912014611aa4565b60606000611e4c83611ccd565b90506000815167ffffffffffffffff811115611e6a57611e6a612f6f565b604051908082528060200260200182016040528015611eaf57816020015b6040805180820190915260608082526020820152815260200190600190039081611e885790505b50905060005b8251811015611f32576000611ee2848381518110611ed557611ed56139c9565b602002602001015161294a565b90506040518060400160405280828152602001611efe83611ccd565b815250838381518110611f1357611f136139c9565b6020026020010181905250508080611f2a90613a85565b915050611eb5565b509392505050565b60006060818080611f4a876129da565b90506000869050600080611f71604051806040016040528060608152602001606081525090565b60005b8c5181101561238c578c8181518110611f8f57611f8f6139c9565b602002602001015191508284611fa59190613a6d565b9350611fb2600188613a6d565b965083600003612019578151805160209091012085146120145760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f742068617368000000000000000000000000000000604482015260640161079c565b6120d6565b81515160201161207b578151805160209091012085146120145760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c20686173680000000000604482015260640161079c565b846120898360000151612b5d565b146120d65760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f64652068617368000000000000604482015260640161079c565b6120e260106001613a6d565b82602001515103612154578551841461238c576000868581518110612109576121096139c9565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110612134576121346139c9565b6020026020010151905061214781612b85565b965060019450505061237a565b60028260200151510361233257600061216c83612bbb565b9050600081600081518110612183576121836139c9565b016020015160f81c9050600061219a600283613aec565b6121a5906002613b0e565b905060006121b6848360ff16612bdf565b905060006121c48b8a612bdf565b905060006121d28383612c15565b905060ff8516600214806121e9575060ff85166003145b1561223f578083511480156121fe5750808251145b156122105761220d818b613a6d565b99505b507f8000000000000000000000000000000000000000000000000000000000000000995061238c945050505050565b60ff85161580612252575060ff85166001145b156122c4578251811461228e57507f8000000000000000000000000000000000000000000000000000000000000000995061238c945050505050565b6122b588602001516001815181106122a8576122a86139c9565b6020026020010151612b85565b9a50975061237a945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f7072656669780000000000000000000000000000000000000000000000000000606482015260840161079c565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e000000604482015260640161079c565b8061238481613a85565b915050611f74565b507f80000000000000000000000000000000000000000000000000000000000000008414866123bb8786612bdf565b909e909d50909b509950505050505050505050565b6020810151805160609161071d916123ea90600190613a27565b81518110611ed557611ed56139c9565b6060600080612408846125f9565b9193509091506001905081600181111561242457612424613a3e565b146124715760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e000000000000000000604482015260640161079c565b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161248a5790505090506000835b86518110156125ee57602082106125365760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e00000000000000000000000000000000000000000000606482015260840161079c565b6000806125736040518060400160405280858c600001516125579190613a27565b8152602001858c6020015161256c9190613a6d565b90526125f9565b50915091506040518060400160405280838361258f9190613a6d565b8152602001848b602001516125a49190613a6d565b8152508585815181106125b9576125b96139c9565b60209081029190910101526125cf600185613a6d565b93506125db8183613a6d565b6125e59084613a6d565b925050506124b7565b508152949350505050565b6000806000808460000151116126515760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640161079c565b6020840151805160001a607f8111612676576000600160009450945094505050612943565b60b781116126f257600061268b608083613a27565b9050808760000151116126e05760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640161079c565b60019550935060009250612943915050565b60bf81116127e157600061270760b783613a27565b90508087600001511161275c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640161079c565b600183015160208290036101000a90046127768183613a6d565b8851116127c55760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640161079c565b6127d0826001613a6d565b965094506000935061294392505050565b60f7811161285c5760006127f660c083613a27565b90508087600001511161284b5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640161079c565b600195509350849250612943915050565b600061286960f783613a27565b9050808760000151116128be5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640161079c565b600183015160208290036101000a90046128d88183613a6d565b8851116129275760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e00000000000000000000604482015260640161079c565b612932826001613a6d565b965094506001935061294392505050565b9193909250565b6060600080600061295a856125f9565b91945092509050600081600181111561297557612975613a3e565b146129c25760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640161079c565b6129d185602001518484612cc1565b95945050505050565b60606000825160026129ec9190613b31565b67ffffffffffffffff811115612a0457612a04612f6f565b6040519080825280601f01601f191660200182016040528015612a2e576020820181803683370190505b50905060005b8351811015612b56576004848281518110612a5157612a516139c9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612a86836002613b31565b81518110612a9657612a966139c9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010848281518110612ad957612ad96139c9565b0160200151612aeb919060f81c613aec565b60f81b82612afa836002613b31565b612b05906001613a6d565b81518110612b1557612b156139c9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612b4e81613a85565b915050612a34565b5092915050565b6000602082511015612b7157506020015190565b8180602001905181019061071d9190613b6e565b60006060602083600001511015612ba657612b9f83612d9f565b9050612bb2565b612baf8361294a565b90505b61170981612b5d565b606061071d612bda8360200151600081518110611ed557611ed56139c9565b6129da565b606082518210612bfe575060408051602081019091526000815261071d565b6117098383848651612c109190613a27565b612daa565b6000805b808451118015612c295750808351115b8015612caa5750828181518110612c4257612c426139c9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612c8157612c816139c9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156117095780612cb981613a85565b915050612c19565b606060008267ffffffffffffffff811115612cde57612cde612f6f565b6040519080825280601f01601f191660200182016040528015612d08576020820181803683370190505b5090508051600003612d1b579050611709565b6000612d278587613a6d565b90506020820160005b612d3b602087613b87565b811015612d725782518252612d51602084613a6d565b9250612d5e602083613a6d565b915080612d6a81613a85565b915050612d30565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061071d82612f2b565b606081612db881601f613a6d565b1015612e065760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161079c565b82612e118382613a6d565b1015612e5f5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161079c565b612e698284613a6d565b84511015612eb95760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161079c565b606082158015612ed85760405191506000825260208201604052612f22565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612f11578051835260209283019201612ef9565b5050858452601f01601f1916604052505b50949350505050565b606061071d826020015160008460000151612cc1565b600060208284031215612f5357600080fd5b5035919050565b6001600160a01b03811681146111ce57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612fc157612fc1612f6f565b60405290565b6040805190810167ffffffffffffffff81118282101715612fc157612fc1612f6f565b604051601f8201601f1916810167ffffffffffffffff8111828210171561301357613013612f6f565b604052919050565b600067ffffffffffffffff83111561303557613035612f6f565b6130486020601f19601f86011601612fea565b905082815283838301111561305c57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261308457600080fd5b6117098383356020850161301b565b803563ffffffff811681146130a757600080fd5b919050565b6000806000606084860312156130c157600080fd5b83356130cc81612f5a565b9250602084013567ffffffffffffffff8111156130e857600080fd5b6130f486828701613073565b92505061310360408501613093565b90509250925092565b6000806000806080858703121561312257600080fd5b84359350602085013561313481612f5a565b9250604085013567ffffffffffffffff81111561315057600080fd5b61315c87828801613073565b92505061316b60608601613093565b905092959194509250565b60006020828403121561318857600080fd5b813567ffffffffffffffff81111561319f57600080fd5b8201601f810184136131b057600080fd5b6118c98482356020840161301b565b60008060008060008060c087890312156131d857600080fd5b86356131e381612f5a565b955060208701356131f381612f5a565b9450604087013567ffffffffffffffff81111561320f57600080fd5b61321b89828a01613073565b9450506060870135925061323160808801613093565b915061323f60a08801613093565b90509295509295509295565b600080600080600080600060e0888a03121561326657600080fd5b87359650602088013561327881612f5a565b9550604088013561328881612f5a565b9450606088013567ffffffffffffffff8111156132a457600080fd5b6132b08a828b01613073565b945050608088013592506132c660a08901613093565b91506132d460c08901613093565b905092959891949750929550565b6000602082840312156132f457600080fd5b813561170981612f5a565b600060a0828403121561331157600080fd5b613319612f9e565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff81111561335757600080fd5b61336384828501613073565b60808301525092915050565b60006040828403121561338157600080fd5b613389612fc7565b90508135815260208083013567ffffffffffffffff808211156133ab57600080fd5b818501915085601f8301126133bf57600080fd5b8135818111156133d1576133d1612f6f565b8060051b91506133e2848301612fea565b81815291830184019184810190888411156133fc57600080fd5b938501935b8385101561341a57843582529385019390850190613401565b808688015250505050505092915050565b600060a0828403121561343d57600080fd5b613445612f9e565b905081358152602082013567ffffffffffffffff8082111561346657600080fd5b613472858386016132ff565b6020840152604084013591508082111561348b57600080fd5b6134978583860161336f565b604084015260608401359150808211156134b057600080fd5b6134bc85838601613073565b606084015260808401359150808211156134d557600080fd5b5061336384828501613073565b600080600080600060a086880312156134fa57600080fd5b853561350581612f5a565b9450602086013561351581612f5a565b9350604086013567ffffffffffffffff8082111561353257600080fd5b61353e89838a01613073565b945060608801359350608088013591508082111561355b57600080fd5b506135688882890161342b565b9150509295509295909350565b60008060008060008060c0878903121561358e57600080fd5b8635955060208701356135a081612f5a565b945060408701356135b081612f5a565b9350606087013567ffffffffffffffff808211156135cd57600080fd5b6135d98a838b01613073565b94506080890135935060a08901359150808211156135f657600080fd5b5061360389828a0161342b565b9150509295509295509295565b805164ffffffffff811681146130a757600080fd5b60006020828403121561363757600080fd5b61170982613610565b60005b8381101561365b578181015183820152602001613643565b8381111561366a576000848401525b50505050565b60008151808452613688816020860160208601613640565b601f01601f19169290920160200192915050565b6001600160a01b038616815260a0602082015260006136be60a0830187613670565b64ffffffffff9590951660408301525063ffffffff92909216606083015260809091015292915050565b6020815260006117096020830184613670565b60006020828403121561370d57600080fd5b815161170981612f5a565b60006060828403121561372a57600080fd5b6040516060810181811067ffffffffffffffff8211171561374d5761374d612f6f565b6040528251815261376060208401613610565b602082015261377160408401613610565b60408201529392505050565b60006001600160a01b03808716835280861660208401525063ffffffff8416604083015260806060830152611bb66080830184613670565b600082516137c7818460208701613640565b9190910192915050565b600084516137e3818460208901613640565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b60006001600160a01b0380871683528086166020840152506080604083015261384f6080830185613670565b905082606083015295945050505050565b8481526001600160a01b0384166020820152826040820152608060608201526000611bb66080830184613670565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a060808501526118c960a0850182613670565b602081526000611709602083018461388e565b6000602082840312156138f057600080fd5b8151801515811461170957600080fd5b84815260006020858184015260806040840152613920608084018661388e565b83810360608501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156139705784518252938501936001939093019290850190613950565b509a9950505050505050505050565b60008351613991818460208801613640565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613a3957613a396139f8565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008219821115613a8057613a806139f8565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ab657613ab66139f8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff831680613aff57613aff613abd565b8060ff84160691505092915050565b600060ff821660ff841680821015613b2857613b286139f8565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6957613b696139f8565b500290565b600060208284031215613b8057600080fd5b5051919050565b600082613b9657613b96613abd565b50049056fea26469706673582212201035ccbe12933bb129e19d896b9ba778f20f5001e4ca98dee031d0881b7c67a564736f6c634300080f0033",
  "deployedBytecode": "0x60806040526004361061016a5760003560e01c8063715018a6116100cb578063b1b1b2091161007f578063d7fd19dd11610059578063d7fd19dd146103be578063eac93b56146103de578063f2fde38b146103fe57600080fd5b8063b1b1b2091461033e578063c4d66de81461036e578063c6b94ab01461038e57600080fd5b80638456cb59116100b05780638456cb59146102eb5780638da5cb5b1461030057806391744b9f1461031e57600080fd5b8063715018a6146102b657806381ada46c146102cb57600080fd5b806344dd5ed6116101225780635c975abb116101075780635c975abb146102695780636e296e45146102815780636f1c8d471461029657600080fd5b806344dd5ed614610236578063461a44781461024957600080fd5b8063299ca47811610153578063299ca478146101d65780633dbb202b1461020e5780633f4ba83a1461022157600080fd5b80630ecf2eea1461016f57806321d800ec14610191575b600080fd5b34801561017b57600080fd5b5061018f61018a366004612f41565b61041e565b005b34801561019d57600080fd5b506101c16101ac366004612f41565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101e257600080fd5b506000546101f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b61018f61021c3660046130ac565b610469565b34801561022d57600080fd5b5061018f61047c565b61018f61024436600461310c565b61048e565b34801561025557600080fd5b506101f6610264366004613176565b610692565b34801561027557600080fd5b5060655460ff166101c1565b34801561028d57600080fd5b506101f6610723565b3480156102a257600080fd5b5061018f6102b13660046131bf565b6107b5565b3480156102c257600080fd5b5061018f6107ce565b3480156102d757600080fd5b5061018f6102e6366004612f41565b6107e0565b3480156102f757600080fd5b5061018f610828565b34801561030c57600080fd5b506033546001600160a01b03166101f6565b34801561032a57600080fd5b5061018f61033936600461324b565b610838565b34801561034a57600080fd5b506101c1610359366004612f41565b60cb6020526000908152604090205460ff1681565b34801561037a57600080fd5b5061018f6103893660046132e2565b610a0c565b34801561039a57600080fd5b506101c16103a9366004612f41565b60c96020526000908152604090205460ff1681565b3480156103ca57600080fd5b5061018f6103d93660046134e2565b610cca565b3480156103ea57600080fd5b5061018f6103f9366004613575565b610ce9565b34801561040a57600080fd5b5061018f6104193660046132e2565b611141565b6104266111d1565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b61047761044084848461048e565b505050565b6104846111d1565b61048c61122b565b565b60006104ce6040518060400160405280601281526020017f4d564d5f446973636f756e744f7261636c650000000000000000000000000000815250610692565b6040517f9955a4b3000000000000000000000000000000000000000000000000000000008152336004820152602481018790529091506001600160a01b03821690639955a4b39034906044016000604051808303818588803b15801561053357600080fd5b505af1158015610547573d6000803e3d6000fd5b5050505050600061058c6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610692565b6040517f2538f3a8000000000000000000000000000000000000000000000000000000008152600481018890529091506000906001600160a01b03831690632538f3a890602401602060405180830381865afa1580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106149190613625565b9050600061062b8733888564ffffffffff1661127d565b905061063f8884838863ffffffff166112f8565b866001600160a01b03167f678d1db16886696652bddc90d68217be474de2ce959bf7383cb63eaa8c6f1afa338885898d60405161068095949392919061369c565b60405180910390a25050505050505050565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac1906106dc9085906004016136e8565b602060405180830381865afa1580156106f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071d91906136fb565b92915050565b60cc546000906001600160a01b03167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016107a55760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064015b60405180910390fd5b5060cc546001600160a01b031690565b6107c6610440878787878787610838565b505050505050565b6107d66111d1565b61048c600061138f565b6107e86111d1565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6108306111d1565b61048c6113f9565b60006108786040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610692565b6040517fa16d359a000000000000000000000000000000000000000000000000000000008152600481018a9052602481018690529091506000906001600160a01b0383169063a16d359a90604401606060405180830381865afa1580156108e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109079190613718565b905060006109178989898961127d565b905060007311110000000000000000000000000000000011113001734200000000000000000000000000000000000007878460405160200161095c949392919061377d565b604051602081830303815290604052805190602001209050826000015181146109ed5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e00000000000000000000000000000000000000000000000000606482015260840161079c565b6109ff8b85848863ffffffff166112f8565b5050505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a57575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a895750303b158015610a89575060005474010000000000000000000000000000000000000000900460ff166001145b610afb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161079c565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610b8157600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6000546001600160a01b031615610c005760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e00000000000000000000000000000000000000000000606482015260840161079c565b600080546001600160a01b0384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cc805490911661dead179055610c4b611436565b610c536114c7565b610c5b611561565b610c636115fe565b8015610cc657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610cd2611696565b610ce26104408686868686610ce9565b5050505050565b600260975403610d3b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161079c565b6002609755610d48611696565b6000610d568686868661127d565b9050610d638782846116e9565b1515600114610dda5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e00000000000000000000000000000000000000000000000000606482015260840161079c565b8051602080830191909120600081815260cb90925260409091205460ff1615610e6b5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e000000000000000000000000000000000000000000606482015260840161079c565b600081815260c9602052604090205460ff1615610ef05760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e000000000000000000000000000000000000000000000000000000000000606482015260840161079c565b610f2e6040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610692565b6001600160a01b0316876001600160a01b031603610fb45760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e00000000000000000000000000606482015260840161079c565b60cc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03888116919091179091556040516000918916906110009088906137b5565b6000604051808303816000865af19150503d806000811461103d576040519150601f19603f3d011682016040523d82523d6000602084013e611042565b606091505b505060cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156110bd57600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26110e9565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b6000833343604051602001611100939291906137d1565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff1916600190811790915560975550505050505050505050565b6111496111d1565b6001600160a01b0381166111c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161079c565b6111ce8161138f565b50565b6033546001600160a01b0316331461048c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161079c565b611233611710565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6060848484846040516024016112969493929190613823565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f511da5310000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063511da531906113579087907342000000000000000000000000000000000000079086908890600401613860565b600060405180830381600087803b15801561137157600080fd5b505af1158015611385573d6000803e3d6000fd5b5050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611401611696565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112603390565b6000547501000000000000000000000000000000000000000000900460ff1661048c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b6000547501000000000000000000000000000000000000000000900460ff166115585760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b61048c3361138f565b6000547501000000000000000000000000000000000000000000900460ff166115f25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff1661168f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161079c565b6001609755565b60655460ff161561048c5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161079c565b60006116f58483611762565b8015611706575061170683836118d1565b90505b9392505050565b60655460ff1661048c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161079c565b6000806117a36040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610692565b60208401516040517f9418bddd0000000000000000000000000000000000000000000000000000000081529192506001600160a01b03831691639418bddd916117ee916004016138cb565b602060405180830381865afa15801561180b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182f91906138de565b1580156118c957508251602084015160408086015190517f80931e370000000000000000000000000000000000000000000000000000000081526001600160a01b038516936380931e3793611888938a93600401613900565b602060405180830381865afa1580156118a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c991906138de565b949350505050565b600080837342000000000000000000000000000000000000076040516020016118fb92919061397f565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f4200000000000000000000000000000000000000000000000000000000000000918301919091529150600090819061198b9060340160408051601f1981840301815291905260608701518751611aaf565b9150915081611a285760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a40161079c565b6000611a3382611ad8565b9050611aa484604051602001611a4b91815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611b9c565b979650505050505050565b600060606000611abe86611bc0565b9050611acb818686611bf2565b9250925050935093915050565b604080516080810182526000808252602082018190529181018290526060810182905290611b0583611ccd565b90506040518060800160405280611b3583600081518110611b2857611b286139c9565b6020026020010151611d00565b8152602001611b5083600181518110611b2857611b286139c9565b8152602001611b7883600281518110611b6b57611b6b6139c9565b6020026020010151611d07565b8152602001611b9383600381518110611b6b57611b6b6139c9565b90529392505050565b600080611ba886611bc0565b9050611bb681868686611e09565b9695505050505050565b60608180519060200120604051602001611bdc91815260200190565b6040516020818303038152906040529050919050565b600060606000611c0185611e3f565b90506000806000611c13848a89611f3a565b81519295509093509150158080611c275750815b611c735760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e000000000000604482015260640161079c565b600081611c8f5760405180602001604052806000815250611cbb565b611cbb86611c9e600188613a27565b81518110611cae57611cae6139c9565b60200260200101516123d0565b919b919a509098505050505050505050565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061071d906123fa565b600061071d825b6000602182600001511115611d5e5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161079c565b6000806000611d6c856125f9565b919450925090506000816001811115611d8757611d87613a3e565b14611dd45760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161079c565b6000838660200151611de69190613a6d565b80519091506020841015611bb65760208490036101000a90049695505050505050565b6000806000611e19878686611bf2565b91509150818015611aa45750805160208083019190912087519188019190912014611aa4565b60606000611e4c83611ccd565b90506000815167ffffffffffffffff811115611e6a57611e6a612f6f565b604051908082528060200260200182016040528015611eaf57816020015b6040805180820190915260608082526020820152815260200190600190039081611e885790505b50905060005b8251811015611f32576000611ee2848381518110611ed557611ed56139c9565b602002602001015161294a565b90506040518060400160405280828152602001611efe83611ccd565b815250838381518110611f1357611f136139c9565b6020026020010181905250508080611f2a90613a85565b915050611eb5565b509392505050565b60006060818080611f4a876129da565b90506000869050600080611f71604051806040016040528060608152602001606081525090565b60005b8c5181101561238c578c8181518110611f8f57611f8f6139c9565b602002602001015191508284611fa59190613a6d565b9350611fb2600188613a6d565b965083600003612019578151805160209091012085146120145760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f742068617368000000000000000000000000000000604482015260640161079c565b6120d6565b81515160201161207b578151805160209091012085146120145760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c20686173680000000000604482015260640161079c565b846120898360000151612b5d565b146120d65760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f64652068617368000000000000604482015260640161079c565b6120e260106001613a6d565b82602001515103612154578551841461238c576000868581518110612109576121096139c9565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110612134576121346139c9565b6020026020010151905061214781612b85565b965060019450505061237a565b60028260200151510361233257600061216c83612bbb565b9050600081600081518110612183576121836139c9565b016020015160f81c9050600061219a600283613aec565b6121a5906002613b0e565b905060006121b6848360ff16612bdf565b905060006121c48b8a612bdf565b905060006121d28383612c15565b905060ff8516600214806121e9575060ff85166003145b1561223f578083511480156121fe5750808251145b156122105761220d818b613a6d565b99505b507f8000000000000000000000000000000000000000000000000000000000000000995061238c945050505050565b60ff85161580612252575060ff85166001145b156122c4578251811461228e57507f8000000000000000000000000000000000000000000000000000000000000000995061238c945050505050565b6122b588602001516001815181106122a8576122a86139c9565b6020026020010151612b85565b9a50975061237a945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f7072656669780000000000000000000000000000000000000000000000000000606482015260840161079c565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e000000604482015260640161079c565b8061238481613a85565b915050611f74565b507f80000000000000000000000000000000000000000000000000000000000000008414866123bb8786612bdf565b909e909d50909b509950505050505050505050565b6020810151805160609161071d916123ea90600190613a27565b81518110611ed557611ed56139c9565b6060600080612408846125f9565b9193509091506001905081600181111561242457612424613a3e565b146124715760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e000000000000000000604482015260640161079c565b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161248a5790505090506000835b86518110156125ee57602082106125365760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e00000000000000000000000000000000000000000000606482015260840161079c565b6000806125736040518060400160405280858c600001516125579190613a27565b8152602001858c6020015161256c9190613a6d565b90526125f9565b50915091506040518060400160405280838361258f9190613a6d565b8152602001848b602001516125a49190613a6d565b8152508585815181106125b9576125b96139c9565b60209081029190910101526125cf600185613a6d565b93506125db8183613a6d565b6125e59084613a6d565b925050506124b7565b508152949350505050565b6000806000808460000151116126515760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640161079c565b6020840151805160001a607f8111612676576000600160009450945094505050612943565b60b781116126f257600061268b608083613a27565b9050808760000151116126e05760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640161079c565b60019550935060009250612943915050565b60bf81116127e157600061270760b783613a27565b90508087600001511161275c5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640161079c565b600183015160208290036101000a90046127768183613a6d565b8851116127c55760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640161079c565b6127d0826001613a6d565b965094506000935061294392505050565b60f7811161285c5760006127f660c083613a27565b90508087600001511161284b5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640161079c565b600195509350849250612943915050565b600061286960f783613a27565b9050808760000151116128be5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640161079c565b600183015160208290036101000a90046128d88183613a6d565b8851116129275760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e00000000000000000000604482015260640161079c565b612932826001613a6d565b965094506001935061294392505050565b9193909250565b6060600080600061295a856125f9565b91945092509050600081600181111561297557612975613a3e565b146129c25760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640161079c565b6129d185602001518484612cc1565b95945050505050565b60606000825160026129ec9190613b31565b67ffffffffffffffff811115612a0457612a04612f6f565b6040519080825280601f01601f191660200182016040528015612a2e576020820181803683370190505b50905060005b8351811015612b56576004848281518110612a5157612a516139c9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612a86836002613b31565b81518110612a9657612a966139c9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506010848281518110612ad957612ad96139c9565b0160200151612aeb919060f81c613aec565b60f81b82612afa836002613b31565b612b05906001613a6d565b81518110612b1557612b156139c9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080612b4e81613a85565b915050612a34565b5092915050565b6000602082511015612b7157506020015190565b8180602001905181019061071d9190613b6e565b60006060602083600001511015612ba657612b9f83612d9f565b9050612bb2565b612baf8361294a565b90505b61170981612b5d565b606061071d612bda8360200151600081518110611ed557611ed56139c9565b6129da565b606082518210612bfe575060408051602081019091526000815261071d565b6117098383848651612c109190613a27565b612daa565b6000805b808451118015612c295750808351115b8015612caa5750828181518110612c4257612c426139c9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612c8157612c816139c9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156117095780612cb981613a85565b915050612c19565b606060008267ffffffffffffffff811115612cde57612cde612f6f565b6040519080825280601f01601f191660200182016040528015612d08576020820181803683370190505b5090508051600003612d1b579050611709565b6000612d278587613a6d565b90506020820160005b612d3b602087613b87565b811015612d725782518252612d51602084613a6d565b9250612d5e602083613a6d565b915080612d6a81613a85565b915050612d30565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061071d82612f2b565b606081612db881601f613a6d565b1015612e065760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161079c565b82612e118382613a6d565b1015612e5f5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161079c565b612e698284613a6d565b84511015612eb95760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161079c565b606082158015612ed85760405191506000825260208201604052612f22565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612f11578051835260209283019201612ef9565b5050858452601f01601f1916604052505b50949350505050565b606061071d826020015160008460000151612cc1565b600060208284031215612f5357600080fd5b5035919050565b6001600160a01b03811681146111ce57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612fc157612fc1612f6f565b60405290565b6040805190810167ffffffffffffffff81118282101715612fc157612fc1612f6f565b604051601f8201601f1916810167ffffffffffffffff8111828210171561301357613013612f6f565b604052919050565b600067ffffffffffffffff83111561303557613035612f6f565b6130486020601f19601f86011601612fea565b905082815283838301111561305c57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261308457600080fd5b6117098383356020850161301b565b803563ffffffff811681146130a757600080fd5b919050565b6000806000606084860312156130c157600080fd5b83356130cc81612f5a565b9250602084013567ffffffffffffffff8111156130e857600080fd5b6130f486828701613073565b92505061310360408501613093565b90509250925092565b6000806000806080858703121561312257600080fd5b84359350602085013561313481612f5a565b9250604085013567ffffffffffffffff81111561315057600080fd5b61315c87828801613073565b92505061316b60608601613093565b905092959194509250565b60006020828403121561318857600080fd5b813567ffffffffffffffff81111561319f57600080fd5b8201601f810184136131b057600080fd5b6118c98482356020840161301b565b60008060008060008060c087890312156131d857600080fd5b86356131e381612f5a565b955060208701356131f381612f5a565b9450604087013567ffffffffffffffff81111561320f57600080fd5b61321b89828a01613073565b9450506060870135925061323160808801613093565b915061323f60a08801613093565b90509295509295509295565b600080600080600080600060e0888a03121561326657600080fd5b87359650602088013561327881612f5a565b9550604088013561328881612f5a565b9450606088013567ffffffffffffffff8111156132a457600080fd5b6132b08a828b01613073565b945050608088013592506132c660a08901613093565b91506132d460c08901613093565b905092959891949750929550565b6000602082840312156132f457600080fd5b813561170981612f5a565b600060a0828403121561331157600080fd5b613319612f9e565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff81111561335757600080fd5b61336384828501613073565b60808301525092915050565b60006040828403121561338157600080fd5b613389612fc7565b90508135815260208083013567ffffffffffffffff808211156133ab57600080fd5b818501915085601f8301126133bf57600080fd5b8135818111156133d1576133d1612f6f565b8060051b91506133e2848301612fea565b81815291830184019184810190888411156133fc57600080fd5b938501935b8385101561341a57843582529385019390850190613401565b808688015250505050505092915050565b600060a0828403121561343d57600080fd5b613445612f9e565b905081358152602082013567ffffffffffffffff8082111561346657600080fd5b613472858386016132ff565b6020840152604084013591508082111561348b57600080fd5b6134978583860161336f565b604084015260608401359150808211156134b057600080fd5b6134bc85838601613073565b606084015260808401359150808211156134d557600080fd5b5061336384828501613073565b600080600080600060a086880312156134fa57600080fd5b853561350581612f5a565b9450602086013561351581612f5a565b9350604086013567ffffffffffffffff8082111561353257600080fd5b61353e89838a01613073565b945060608801359350608088013591508082111561355b57600080fd5b506135688882890161342b565b9150509295509295909350565b60008060008060008060c0878903121561358e57600080fd5b8635955060208701356135a081612f5a565b945060408701356135b081612f5a565b9350606087013567ffffffffffffffff808211156135cd57600080fd5b6135d98a838b01613073565b94506080890135935060a08901359150808211156135f657600080fd5b5061360389828a0161342b565b9150509295509295509295565b805164ffffffffff811681146130a757600080fd5b60006020828403121561363757600080fd5b61170982613610565b60005b8381101561365b578181015183820152602001613643565b8381111561366a576000848401525b50505050565b60008151808452613688816020860160208601613640565b601f01601f19169290920160200192915050565b6001600160a01b038616815260a0602082015260006136be60a0830187613670565b64ffffffffff9590951660408301525063ffffffff92909216606083015260809091015292915050565b6020815260006117096020830184613670565b60006020828403121561370d57600080fd5b815161170981612f5a565b60006060828403121561372a57600080fd5b6040516060810181811067ffffffffffffffff8211171561374d5761374d612f6f565b6040528251815261376060208401613610565b602082015261377160408401613610565b60408201529392505050565b60006001600160a01b03808716835280861660208401525063ffffffff8416604083015260806060830152611bb66080830184613670565b600082516137c7818460208701613640565b9190910192915050565b600084516137e3818460208901613640565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b60006001600160a01b0380871683528086166020840152506080604083015261384f6080830185613670565b905082606083015295945050505050565b8481526001600160a01b0384166020820152826040820152608060608201526000611bb66080830184613670565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a060808501526118c960a0850182613670565b602081526000611709602083018461388e565b6000602082840312156138f057600080fd5b8151801515811461170957600080fd5b84815260006020858184015260806040840152613920608084018661388e565b83810360608501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156139705784518252938501936001939093019290850190613950565b509a9950505050505050505050565b60008351613991818460208801613640565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613a3957613a396139f8565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008219821115613a8057613a806139f8565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ab657613ab66139f8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff831680613aff57613aff613abd565b8060ff84160691505092915050565b600060ff821660ff841680821015613b2857613b286139f8565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6957613b696139f8565b500290565b600060208284031215613b8057600080fd5b5051919050565b600082613b9657613b96613abd565b50049056fea26469706673582212201035ccbe12933bb129e19d896b9ba778f20f5001e4ca98dee031d0881b7c67a564736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
