{
  "_format": "hh-sol-artifact-1",
  "contractName": "ClusterAttributeAreaToken",
  "sourceName": "contracts/V3/ClusterAttributeAreaToken.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "SetClusterAttr",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "SetTokenAttr",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "parentAttrId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "latestState",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "int40",
          "name": "latestAttrAmount",
          "type": "int40"
        }
      ],
      "name": "TokenAttrChange",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "parentAttrId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "getClusterTokenAttrData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "attrId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "attrType",
              "type": "uint8"
            },
            {
              "internalType": "int40",
              "name": "attrAmount",
              "type": "int40"
            },
            {
              "internalType": "uint32",
              "name": "parentAttrId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "attrState",
              "type": "uint8"
            }
          ],
          "internalType": "struct Attribute.AttributeData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getClusterTokenAttrIdList",
      "outputs": [
        {
          "internalType": "uint32[]",
          "name": "",
          "type": "uint32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "parentAttrId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "getClusterTokenAttrOpt",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "attrId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "attrOpt",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "attrType",
              "type": "uint8"
            },
            {
              "internalType": "int40",
              "name": "attrAmount",
              "type": "int40"
            },
            {
              "internalType": "int40",
              "name": "attrAmountMin",
              "type": "int40"
            },
            {
              "internalType": "int40",
              "name": "attrAmountMax",
              "type": "int40"
            },
            {
              "internalType": "string",
              "name": "attrText",
              "type": "string"
            },
            {
              "internalType": "uint32",
              "name": "parentAttrId",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "attrState",
              "type": "uint8"
            },
            {
              "internalType": "bytes4",
              "name": "attrFormula",
              "type": "bytes4"
            }
          ],
          "internalType": "struct Attribute.AttributeOptEx",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "getClusterTokenSubAttrIdList",
      "outputs": [
        {
          "internalType": "uint32[]",
          "name": "",
          "type": "uint32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "subAttrId",
          "type": "uint32"
        }
      ],
      "name": "getSubAttrTypeAmount",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clusterArea_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "poolContract_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "engine_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterAttributeArea_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "parentAttrId",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "makeAttrHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "sumAttrAmount",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int40",
          "name": "sumAmount",
          "type": "int40"
        },
        {
          "internalType": "uint8",
          "name": "subType",
          "type": "uint8"
        },
        {
          "internalType": "int40",
          "name": "subAmount",
          "type": "int40"
        }
      ],
      "name": "sumAttrAmountByType",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "layerCount",
          "type": "uint8"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "sumMountingAttrAmount",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "layerCount",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "layerIndex",
          "type": "uint8"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "attrId",
          "type": "uint32"
        }
      ],
      "name": "sumMountingRecursiveAttrAmount",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "tokenAttributeAmount",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "tokenAttributeAmountMax",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "tokenAttributeAmountMin",
      "outputs": [
        {
          "internalType": "int40",
          "name": "",
          "type": "int40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenAttributeIdList",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "tokenAttributeState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "tokenAttributeText",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "tokenAttributeType",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenSubAttributeIdList",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrOpt",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "attrType",
                  "type": "uint8"
                },
                {
                  "internalType": "int40",
                  "name": "attrAmount",
                  "type": "int40"
                },
                {
                  "internalType": "string",
                  "name": "attrText",
                  "type": "string"
                },
                {
                  "internalType": "uint32",
                  "name": "parentAttrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrState",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes4",
                  "name": "attrFormula",
                  "type": "bytes4"
                }
              ],
              "internalType": "struct Attribute.AttributeOpt[]",
              "name": "attributeOptList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct Attribute.TokenAttributeList[]",
          "name": "tokenAttrList",
          "type": "tuple[]"
        }
      ],
      "name": "updateClusterTokenIdAttrList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrOpt",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "attrType",
                  "type": "uint8"
                },
                {
                  "internalType": "int40",
                  "name": "attrAmount",
                  "type": "int40"
                },
                {
                  "internalType": "string",
                  "name": "attrText",
                  "type": "string"
                },
                {
                  "internalType": "uint32",
                  "name": "parentAttrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrState",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes4",
                  "name": "attrFormula",
                  "type": "bytes4"
                }
              ],
              "internalType": "struct Attribute.AttributeOpt[]",
              "name": "attributeOptList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct Attribute.TokenAttributeList",
          "name": "tokenAttrList",
          "type": "tuple"
        }
      ],
      "name": "updateClusterTokenIdOptAttrList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrOpt",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "attrType",
                  "type": "uint8"
                },
                {
                  "internalType": "int40",
                  "name": "attrAmount",
                  "type": "int40"
                },
                {
                  "internalType": "string",
                  "name": "attrText",
                  "type": "string"
                },
                {
                  "internalType": "uint32",
                  "name": "parentAttrId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "attrState",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes4",
                  "name": "attrFormula",
                  "type": "bytes4"
                }
              ],
              "internalType": "struct Attribute.AttributeOpt[]",
              "name": "attributeOptList",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct Attribute.TokenAttributeList",
          "name": "tokenAttrList",
          "type": "tuple"
        }
      ],
      "name": "updateTokenIdOptAttrList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506147bf806100206000396000f3fe608060405234801561001057600080fd5b50600436106101595760003560e01c80636a8efeb6116100c95780636a8efeb6146102f25780636a9b94b114610327578063715018a61461033a57806374bbd42e146103425780637f55cbe3146103555780638da5cb5b146103785780639a5bdf8a14610391578063b782465a146103f9578063c61b53f71461040c578063cb2a77a21461042f578063e69c707014610442578063f264eac514610462578063f2fde38b14610485578063f8c8765e1461049857600080fd5b806301a554c21461015e5780630596af851461018757806308c21f2a146101af5780630cf825af146101c45780631a9c6415146101f35780632abe18e5146102295780632d003dea1461023c57806334c76b251461024f57806336b6fdea146102845780633d8239a1146102975780633f41ee02146102b857806354fd4d50146102d85780635f0bdd02146102df575b600080fd5b61017161016c36600461381a565b6104ab565b60405161017e919061388b565b60405180910390f35b61019a6101953660046138a5565b610545565b60405163ffffffff909116815260200161017e565b6101c26101bd366004613bfa565b61058e565b005b6101d76101d2366004613c49565b610616565b6040805160ff909316835260049190910b60208301520161017e565b61021661020136600461381a565b606f6020526000908152604090205460040b81565b60405160049190910b815260200161017e565b6101c2610237366004613ca9565b61065a565b61021661024a366004613d6c565b610d7a565b60408051808201909152601981527821b63ab9ba32b920ba3a3934b13aba32a0b932b0aa37b5b2b760391b6020820152610171565b610216610292366004613dc2565b610fae565b6102aa6102a5366004613c49565b61115d565b60405190815260200161017e565b6102cb6102c6366004613e49565b6111c5565b60405161017e9190613e88565b60016102aa565b6101c26102ed366004613ed2565b611282565b61031561030036600461381a565b606c6020526000908152604090205460ff1681565b60405160ff909116815260200161017e565b610216610335366004613f31565b611307565b6101c2611326565b61019a6103503660046138a5565b61133a565b61031561036336600461381a565b60716020526000908152604090205460ff1681565b6033546001600160a01b031660405161017e9190613fa4565b6103a461039f366004613c49565b611356565b60405161017e9190600060a08201905063ffffffff80845116835260ff6020850151166020840152604084015160040b60408401528060608501511660608401525060ff608084015116608083015292915050565b610216610407366004613fb8565b6113d3565b61021661041a36600461381a565b606e6020526000908152604090205460040b81565b6102cb61043d366004613ffd565b61142a565b610455610450366004613c49565b6114d0565b60405161017e919061404c565b61021661047036600461381a565b606d6020526000908152604090205460040b81565b6101c261049336600461412f565b611614565b6101c26104a636600461414c565b61168d565b607060205260009081526040902080546104c4906141a8565b80601f01602080910402602001604051908101604052809291908181526020018280546104f0906141a8565b801561053d5780601f106105125761010080835404028352916020019161053d565b820191906000526020600020905b81548152906001019060200180831161052057829003601f168201915b505050505081565b606a602052816000526040600020818154811061056157600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6066546001600160a01b031633146106065760405162461bcd60e51b815260206004820152603060248201527f63616c6c20757064617465546f6b656e496444656c7461417474724c6973742060448201526f6d75737420636c75737465724172656160801b60648201526084015b60405180910390fd5b610612826000836117f4565b5050565b6000806000610628888888888861115d565b6000908152606c6020908152604080832054606d9092529091205460ff909116935060040b9150509550959350505050565b63ffffffff82161561076757606754604080516378d0973360e11b815263ffffffff851660048201526002602482015233604482015290516001600160a01b039092169163f1a12e6691606480820192602092909190829003018186803b1580156106c457600080fd5b505afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc91906141e3565b6107675760405162461bcd60e51b815260206004820152603660248201527f63616c6c20757064617465436c7573746572546f6b656e4964417474724c69736044820152753a1036bab9ba1031b63ab9ba32b92232b83637bcb2b960511b60648201526084016105fd565b60005b8151811015610d7557600082828151811061078757610787614205565b6020026020010151905060008463ffffffff16600014156108b8576107b4826000015183604001516118ef565b606854835160405163b9caf9d960e01b81529293506000926001600160a01b039092169163b9caf9d9916107ea91600401613fa4565b60206040518083038186803b15801561080257600080fd5b505afa158015610816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a919061421b565b90506001600160a01b03811633146108b25760405162461bcd60e51b815260206004820152603560248201527f757064617465436c7573746572546f6b656e4964417474724c6973743a206d73604482015274339739b2b73232b9103737ba103232b83637bcb2b960591b60648201526084016105fd565b506108ce565b6108cb858360000151846040015161192d565b90505b60005b826060015151811015610d615760008063ffffffff88166109d857600061091d86600001518760600151868151811061090c5761090c614205565b602002602001015160000151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b15801561096257600080fd5b505afa158015610976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099a9190614238565b91506109d086600001518760400151886060015187815181106109bf576109bf614205565b60200260200101516000015161198f565b925050610abd565b6000610a0589876060015186815181106109f4576109f4614205565b6020026020010151600001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015610a4a57600080fd5b505afa158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a829190614238565b9150610ab9898760000151886040015189606001518881518110610aa857610aa8614205565b6020026020010151600001516119e4565b9250505b60ff8116600114801590610ad5575060ff8116600214155b8015610ae5575060ff8116600b14155b8015610af5575060ff8116600c14155b15610b6d576000610b4d6040518060600160405280603b815260200161466f603b9139610b4888606001518781518110610b3157610b31614205565b60200260200101516000015163ffffffff16611a3c565b611a4d565b90610b6b5760405162461bcd60e51b81526004016105fd919061388b565b505b6000828152607160205260408120546060870151805160ff909216929186908110610b9a57610b9a614205565b602002602001015160c001519050600b60ff168260ff161415610c3c5760ff8116600c14610c3c5760405162461bcd60e51b815260206004820152604360248201527f757064617465436c7573746572546f6b656e4964417474724c697374206d757360448201527f7420656e61626c6520666f726576657220746f2064697361626c6520666f72656064820152623b32b960e91b608482015260a4016105fd565b60ff8216600c1415610ccd5760ff8116600b14610ccd5760405162461bcd60e51b815260206004820152604360248201527f757064617465436c7573746572546f6b656e4964417474724c697374206d757360448201527f742064697361626c6520666f726576657220746f20656e61626c6520666f72656064820152623b32b960e91b608482015260a4016105fd565b60ff8216600b14801590610ce5575060ff8216600c14155b15610d4c57610d1b8a886000015189604001518a606001518981518110610d0e57610d0e614205565b6020026020010151611a79565b610d4c8a886000015189604001518a606001518981518110610d3f57610d3f614205565b6020026020010151612f84565b5050505080610d5a9061426b565b90506108d1565b50505080610d6e9061426b565b905061076a565b505050565b600080610d8b86868660008761115d565b6000818152606d602052604081205491925060049190910b90610db08888888861142a565b60408051600280825260608201835292935060019260009260208301908036833701905050905060ff8b1660021415610e3e5760029150600281600081518110610dfc57610dfc614205565b602002602001019060ff16908160ff1681525050600381600181518110610e2557610e25614205565b602002602001019060ff16908160ff1681525050610ecd565b60ff8b1660011415610e8c5760029150600381600081518110610e6357610e63614205565b602002602001019060ff16908160ff1681525050600281600181518110610e2557610e25614205565b60ff8b1660031415610ecd57610ea18361319e565b9250600081600081518110610eb857610eb8614205565b602002602001019060ff16908160ff16815250505b60005b8260ff16811015610f9e5760005b8451811015610f8d576000858281518110610efb57610efb614205565b60200260200101519050600080610f158f8f8f8f87610616565b91509150600060ff1686600081518110610f3157610f31614205565b602002602001015160ff161480610f665750858581518110610f5557610f55614205565b602002602001015160ff168260ff16145b15610f7957610f768983836113d3565b98505b50505080610f869061426b565b9050610ede565b50610f978161426b565b9050610ed0565b50929a9950505050505050505050565b600080610fbe8987878787610d7a565b610fc89082614286565b90508760ff168760ff161415610fdf579050611152565b606754604080516377b2ecf960e11b815290516000926001600160a01b03169163ef65d9f2916004808301926020929190829003018186803b15801561102457600080fd5b505afa158015611038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c919061421b565b6001600160a01b031663de2291948888886040518463ffffffff1660e01b815260040161108b939291906142d1565b60006040518083038186803b1580156110a357600080fd5b505afa1580156110b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110df91908101906142f8565b905060005b815181101561114c57600082828151811061110157611101614205565b6020026020010151905061112e8c8c8c600161111d91906143c8565b8c856020015186604001518c610fae565b6111389085614286565b935050806111459061426b565b90506110e4565b50909150505b979650505050505050565b60008063ffffffff84166111945763ffffffff87166111885761118186868561198f565b90506111bb565b611181878787866119e4565b63ffffffff87166111ab57611181868686866131bd565b6111b887878787876131f5565b90505b9695505050505050565b6060600063ffffffff85166111e5576111de84846118ef565b90506111f3565b6111f085858561192d565b90505b6000818152606a60209081526040918290208054835181840281018401909452808452909183018282801561127357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116112365790505b50505050509150509392505050565b6066546001600160a01b031633146112fc5760405162461bcd60e51b815260206004820152603760248201527f63616c6c20757064617465436c7573746572546f6b656e496444656c7461417460448201527674724c697374206d75737420636c75737465724172656160481b60648201526084016105fd565b610d758383836117f4565b60008061131a8888600089898989610fae565b98975050505050505050565b61132e613255565b61133860006132af565b565b606b602052816000526040600020818154811061056157600080fd5b61135e6136ce565b600061136d878787878761115d565b90506113776136ce565b63ffffffff93841681526000828152606c602090815260408083205460ff90811683860152858452606d83528184205460040b828601529790961660608401529281526071909252929020549092166080820152949350505050565b600060ff831660031415611409576127106113ee8382614286565b6113f890866143ed565b6114029190614494565b9350611422565b60ff8316600214156114225761141f8285614286565b93505b509192915050565b6060600061143c86868660008761115d565b6000818152606b602090815260409182902080548351818402810184019094528084529394509192908301828280156114c057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116114835790505b5050505050915050949350505050565b6114d86136fc565b60006114e7878787878761115d565b90506114f16136fc565b63ffffffff8085168252851660e082015260006020808301829052838252606c815260408083205460ff1681850152848352606d825280832054600490810b6060860152858452606e835281842054810b6080860152858452606f835281842054900b60a085015284835260709091529020805461156e906141a8565b80601f016020809104026020016040519081016040528092919081815260200182805461159a906141a8565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b505050505060c08201526000918252607160205260409091205460ff166101008201529695505050505050565b61161c613255565b6001600160a01b0381166116815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105fd565b61168a816132af565b50565b600054610100900460ff16158080156116ad5750600054600160ff909116105b806116c75750303b1580156116c7575060005460ff166001145b61172a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105fd565b6000805460ff19166001179055801561174d576000805461ff0019166101001790555b611755613301565b61175d613328565b606680546001600160a01b038086166001600160a01b0319928316179092556067805488841690831617905560688054878416908316179055606980549285169290911691909117905580156117ed576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b602081015160ff166002141561180957611881565b602081015160ff166003141561181e57611881565b60405162461bcd60e51b815260206004820152603260248201527f5f757064617465546f6b656e496444656c7461417474724c69737420657263206044820152716973206e6f7420373231206f72203131353560701b60648201526084016105fd565b60005b8160600151518110156118e9576118b5838360000151846040015185606001518581518110610d0e57610d0e614205565b6118d9838360000151846040015185606001518581518110610d3f57610d3f614205565b6118e28161426b565b9050611884565b50505050565b604080516001600160a01b03841660208201529081018290526000906060015b60405160208183030381529060405280519060200120905092915050565b6000838383604051602001611944939291906142d1565b6040516020818303038152906040528051906020012090509392505050565b604080516001600160a01b038416602082015263ffffffff83169181019190915260009060600161190f565b604080516001600160a01b038516602082015290810183905263ffffffff82166060820152600090608001611944565b6040805163ffffffff808516602083015283169181019190915260009060600161190f565b6040805163ffffffff80871660208301526001600160a01b0386169282019290925260608101849052908216608082015260009060a0015b604051602081830303815290604052805190602001209050949350505050565b6060611a4782613358565b92915050565b60608282604051602001611a629291906144d0565b604051602081830303815290604052905092915050565b6000806000606560ff16846020015160ff161480611a9e5750602084015160ff166066145b80611ab05750602084015160ff166067145b15611b67576000611ac5878660000151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015611b0a57600080fd5b505afa158015611b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b429190614238565b9250611b4e87876118ef565b9150611b5f8787876000015161198f565b935050611c17565b6000611b778886600001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015611bbc57600080fd5b505afa158015611bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf49190614238565b9250611c0188888861192d565b9150611c1388888888600001516119e4565b9350505b60ff8216611c6e576000611c4e60405180606001604052806030815260200161471d603091398651610b489063ffffffff16611a3c565b90611c6c5760405162461bcd60e51b81526004016105fd919061388b565b505b602084015160ff1660011480611c8b5750602084015160ff166065145b156120c0576000838152606e6020908152604080832054606f909252918290205491860151600491820b9290910b9060ff1660011415611e245760008581526071602052604090205460ff16611d7d576000838152606a60209081526040808320895181546001810183559185528385206008830401805463ffffffff92831660046007909516949094026101000a938402929093021990921617905588810151888452606c8352818420805460ff92831660ff199182161790915560c08b015160718552838620805491909316911617905560808901516070835292208251611d7b939192919091019061374f565b505b8160040b6000148015611d9357508060040b6000145b15611dc95760608601516000868152606d60205260409020805464ffffffffff191664ffffffffff9092169190911790556120b9565b856060015160040b8260040b13158015611ded57508060040b866060015160040b13155b15611e1f5760608601516000868152606d60205260409020805464ffffffffff191664ffffffffff9092169190911790555b6120b9565b604086015160ff1660021415611f645760008581526071602052604090205460ff16611e4f576120b9565b60608601516000868152606d602052604081208054909190611e7590849060040b614286565b92506101000a81548164ffffffffff021916908360040b64ffffffffff1602179055508160040b6000141580611eaf57508060040b600014155b15611e1f576000866060015160040b138015611edf57506000858152606d6020526040902054600482810b91900b135b15611f0c576000858152606d60205260409020805464ffffffffff191664ffffffffff83161790556120b9565b6000866060015160040b128015611f3757506000858152606d6020526040902054600483810b91900b125b15611e1f576000858152606d60205260409020805464ffffffffff191664ffffffffff84161790556120b9565b604086015160ff16600314156120b95760008581526071602052604090205460ff16611f8f576120b9565b6127108660600151612710611fa49190614286565b6000878152606d6020526040902054611fc0919060040b6143ed565b611fca9190614494565b6000868152606d60205260409020805464ffffffffff191664ffffffffff92909216919091179055600482900b15158061200857508060040b600014155b156120b9576000866060015160040b13801561203857506000858152606d6020526040902054600482810b91900b135b15612065576000858152606d60205260409020805464ffffffffff191664ffffffffff83161790556120b9565b6000866060015160040b12801561209057506000858152606d6020526040902054600483810b91900b125b156120b9576000858152606d60205260409020805464ffffffffff191664ffffffffff84161790555b5050612f7b565b602084015160ff16600214806120dd5750602084015160ff166066145b1561262e57600080606660ff16866020015160ff16141561219e576000612108898860a00151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b15801561214d57600080fd5b505afa158015612161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121859190614238565b915061219689898960a0015161198f565b925050612241565b60006121ae8a8860a001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222b9190614238565b915061223d8a8a8a8a60a001516119e4565b9250505b60ff811615801561225c575060008660a0015163ffffffff16115b156122b257600061229260405180606001604052806036815260200161463960369139610b488960a0015163ffffffff16611a3c565b906122b05760405162461bcd60e51b81526004016105fd919061388b565b505b60008281526071602052604090205460ff161580156122db575060008660a0015163ffffffff16115b156123315760006123116040518060600160405280603681526020016146e760369139610b488960a0015163ffffffff16611a3c565b9061232f5760405162461bcd60e51b81526004016105fd919061388b565b505b60a086015163ffffffff16156124dc576000828152606b60205260408120905b81548110156123b657876000015163ffffffff1682828154811061237757612377614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1614156123a6576123b6565b6123af8161426b565b9050612351565b81548114156124d55787518254600181018455600084815260208082206008840401805460079094166004026101000a63ffffffff81810219909516949095169490940292909217909255890151606660ff909116141561242c576124258b8b8b60a001518c600001516131bd565b9050612444565b6124418c8c8c8c60a001518d600001516131f5565b90505b6040898101516000838152606c6020908152838220805460ff191660ff9094169390931790925560608c0151606d8352838220805464ffffffffff191664ffffffffff90921691909117905560808c01516070835292902082516124ae939192919091019061374f565b5060c0890151600091825260716020526040909120805460ff191660ff9092169190911790555b50506120b9565b6000838152606a60205260408120905b815481101561255157876000015163ffffffff1682828154811061251257612512614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16141561254157612551565b61254a8161426b565b90506124ec565b81548114156126255787518254600181018455600084815260208082206008840401805460079094166004026101000a63ffffffff818102199095169490951694909402929092179092556040808b01518a8452606c8352818420805460ff191660ff90921691909117905560608b0151606d8352818420805464ffffffffff191664ffffffffff90921691909117905560808b015160708352922082516125ff939192919091019061374f565b5060c08801516000888152607160205260409020805460ff191660ff9092169190911790555b50505050612f7b565b602084015160ff166003148061264b5750602084015160ff166067145b15612cc85760a084015163ffffffff166128fd576000818152606a60209081526040808320868452606b909252822090915b82548110156127fd57866000015163ffffffff168382815481106126a3576126a3614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1614156127ed57825483906126dd9060019061450c565b815481106126ed576126ed614205565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1683828154811061272557612725614205565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280548061276857612768614523565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a021916905591909255878252606c81526040808320805460ff199081169091556071835281842080549091169055607090915281206127ce916137cf565b6000868152606d60205260409020805464ffffffffff191690556127fd565b6127f68161426b565b905061267d565b50805460005b818110156126255760006128558c8c8c8c6000015188878154811061282a5761282a614205565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff166131f5565b6000818152606c60209081526040808320805460ff1990811690915560718352818420805490911690556070909152812091925061289391906137cf565b6000818152606d60205260409020805464ffffffffff1916905583548490806128be576128be614523565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a02191690559055506128f68161426b565b9050612803565b600080606760ff16866020015160ff1614156129b9576000612923898860a00151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b15801561296857600080fd5b505afa15801561297c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a09190614238565b91506129b189898960a0015161198f565b925050612a5c565b60006129c98a8860a001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015612a0e57600080fd5b505afa158015612a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a469190614238565b9150612a588a8a8a8a60a001516119e4565b9250505b60ff8116612ab5576000612a956040518060600160405280603d81526020016146aa603d9139610b488960a0015163ffffffff16611a3c565b90612ab35760405162461bcd60e51b81526004016105fd919061388b565b505b60008281526071602052604090205460ff16612b1c576000612afc6040518060600160405280603d815260200161474d603d9139610b488960a0015163ffffffff16611a3c565b90612b1a5760405162461bcd60e51b81526004016105fd919061388b565b505b6000828152606b60205260408120905b815481101561262557876000015163ffffffff16828281548110612b5257612b52614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff161415612cb85781548290612b8c9060019061450c565b81548110612b9c57612b9c614205565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16828281548110612bd457612bd4614205565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555081805480612c1757612c17614523565b600082815260208120600860001990930192830401805463ffffffff600460078616026101000a0219169055915560a08901518951612c5b918e918e918e916131f5565b6000818152606c60209081526040808320805460ff19908116909155607183528184208054909116905560709091528120919250612c9991906137cf565b6000908152606d60205260409020805464ffffffffff19169055612625565b612cc18161426b565b9050612b2c565b602084015160ff1660051480612ce55750602084015160ff166069145b15612e3857604084015160ff1660011415612d2b5760608401516000848152606e60205260409020805464ffffffffff191664ffffffffff909216919091179055612f7b565b604084015160ff1660021415612da45760008381526071602052604090205460ff16612d5657612f7b565b60608401516000848152606e602052604081208054909190612d7c90849060040b614286565b92506101000a81548164ffffffffff021916908360040b64ffffffffff160217905550612f7b565b604084015160ff1660031415612e335760008381526071602052604090205460ff16612dcf57612f7b565b6127108460600151612710612de49190614286565b6000858152606e6020526040902054612e00919060040b6143ed565b612e0a9190614494565b6000848152606e60205260409020805464ffffffffff191664ffffffffff929092169190911790555b612f7b565b602084015160ff1660061480612e555750602084015160ff16606a145b15612f7b57604084015160ff1660011415612e9b5760608401516000848152606f60205260409020805464ffffffffff191664ffffffffff909216919091179055612f7b565b604084015160ff1660021415612eec5760008381526071602052604090205460ff16612ec657612f7b565b60608401516000848152606f602052604081208054909190612d7c90849060040b614286565b604084015160ff1660031415612f7b5760008381526071602052604090205460ff16612f1757612f7b565b6127108460600151612710612f2c9190614286565b6000858152606f6020526040902054612f48919060040b6143ed565b612f529190614494565b6000848152606f60205260409020805464ffffffffff191664ffffffffff929092169190911790555b50505050505050565b600080606560ff16836020015160ff161480612fa75750602083015160ff166066145b80612fb95750602083015160ff166067145b156130665760695483516001600160a01b0390911690638c91c7a790612fe0908890611963565b6040518263ffffffff1660e01b8152600401612ffe91815260200190565b60206040518083038186803b15801561301657600080fd5b505afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614238565b905061305f8585856000015161198f565b915061310b565b60695483516001600160a01b0390911690638c91c7a7906130889089906119bf565b6040518263ffffffff1660e01b81526004016130a691815260200190565b60206040518083038186803b1580156130be57600080fd5b505afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614238565b905061310886868686600001516119e4565b91505b825160a0808501516000858152606d602090815260409182902054825163ffffffff8d811682526001600160a01b038d16938201939093528084018b905295821660608701529216608085015260ff85169284019290925260040b60c0830152517f9af4ac7f337a74edeb4ec2cbeb6fd5a7b8065b51fd04e009420c273f8fb2be2f9181900360e00190a1505050505050565b60606131b9826000600185516131b4919061450c565b6133f4565b5090565b604080516001600160a01b038616602082015290810184905263ffffffff80841660608301528216608082015260009060a001611a1c565b6040805163ffffffff80881660208301526001600160a01b0387169282019290925260608101859052818416608082015290821660a082015260009060c00160405160208183030381529060405280519060200120905095945050505050565b6033546001600160a01b031633146113385760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105fd565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113385760405162461bcd60e51b81526004016105fd90614539565b600054610100900460ff1661334f5760405162461bcd60e51b81526004016105fd90614539565b611338336132af565b60606000613365836135f8565b60010190506000816001600160401b03811115613384576133846138dc565b6040519080825280601f01601f1916602001820160405280156133ae576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846133e7576133ec565b6133b8565b509392505050565b818163ffffffff808316908216141561340e575050505050565b600085600261341d8787614584565b61342791906145a9565b61343190876145cc565b63ffffffff168151811061344757613447614205565b602002602001015190505b8163ffffffff168363ffffffff16116135b2575b8063ffffffff16868463ffffffff168151811061348557613485614205565b602002602001015163ffffffff1610156134ab57826134a3816145f4565b935050613466565b858263ffffffff16815181106134c3576134c3614205565b602002602001015163ffffffff168163ffffffff1610156134f057816134e881614618565b9250506134ab565b8163ffffffff168363ffffffff16116135ad57858263ffffffff168151811061351b5761351b614205565b6020026020010151868463ffffffff168151811061353b5761353b614205565b6020026020010151878563ffffffff168151811061355b5761355b614205565b60200260200101888563ffffffff168151811061357a5761357a614205565b63ffffffff9384166020918202929092010152911690528261359b816145f4565b93505081806135a990614618565b9250505b613452565b8163ffffffff168563ffffffff1610156135d1576135d18686846133f4565b8363ffffffff168363ffffffff1610156135f0576135f08684866133f4565b505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106136375772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613661576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061367f57662386f26fc10000830492506010015b6305f5e1008310613697576305f5e100830492506008015b61271083106136ab57612710830492506004015b606483106136bd576064830492506002015b600a8310611a475760010192915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052610100810182905261012081019190915290565b82805461375b906141a8565b90600052602060002090601f01602090048101928261377d57600085556137c3565b82601f1061379657805160ff19168380011785556137c3565b828001600101855582156137c3579182015b828111156137c35782518255916020019190600101906137a8565b506131b9929150613805565b5080546137db906141a8565b6000825580601f106137eb575050565b601f01602090049060005260206000209081019061168a91905b5b808211156131b95760008155600101613806565b60006020828403121561382c57600080fd5b5035919050565b60005b8381101561384e578181015183820152602001613836565b838111156118e95750506000910152565b60008151808452613877816020860160208601613833565b601f01601f19169290920160200192915050565b60208152600061389e602083018461385f565b9392505050565b600080604083850312156138b857600080fd5b50508035926020909101359150565b6001600160a01b038116811461168a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613914576139146138dc565b60405290565b60405161010081016001600160401b0381118282101715613914576139146138dc565b604051601f8201601f191681016001600160401b0381118282101715613965576139656138dc565b604052919050565b60ff8116811461168a57600080fd5b80356139878161396d565b919050565b60006001600160401b038211156139a5576139a56138dc565b5060051b60200190565b803563ffffffff8116811461398757600080fd5b8035600481900b811461398757600080fd5b600082601f8301126139e657600080fd5b81356001600160401b038111156139ff576139ff6138dc565b613a12601f8201601f191660200161393d565b818152846020838601011115613a2757600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160e01b03198116811461398757600080fd5b600060808284031215613a6e57600080fd5b613a766138f2565b90508135613a83816138c7565b8152602082810135613a948161396d565b828201526040838101359083015260608301356001600160401b0380821115613abc57600080fd5b818501915085601f830112613ad057600080fd5b8135613ae3613ade8261398c565b61393d565b81815260059190911b83018401908481019088831115613b0257600080fd5b8585015b83811015613be857803585811115613b1e5760008081fd5b8601610100818c03601f1901811315613b375760008081fd5b613b3f61391a565b613b4a8a84016139af565b8152613b586040840161397c565b8a820152613b686060840161397c565b6040820152613b79608084016139c3565b606082015260a08084013589811115613b925760008081fd5b613ba08f8d838801016139d5565b60808401525060c0613bb38186016139af565b8284015260e09150613bc682860161397c565b90830152613bd5848401613a44565b9082015285525050918601918601613b06565b50606087015250939695505050505050565b60008060408385031215613c0d57600080fd5b8235613c18816138c7565b915060208301356001600160401b03811115613c3357600080fd5b613c3f85828601613a5c565b9150509250929050565b600080600080600060a08688031215613c6157600080fd5b613c6a866139af565b94506020860135613c7a816138c7565b935060408601359250613c8f606087016139af565b9150613c9d608087016139af565b90509295509295909350565b60008060408385031215613cbc57600080fd5b613cc5836139af565b91506020808401356001600160401b0380821115613ce257600080fd5b818601915086601f830112613cf657600080fd5b8135613d04613ade8261398c565b81815260059190911b83018401908481019089831115613d2357600080fd5b8585015b83811015613d5b57803585811115613d3f5760008081fd5b613d4d8c89838a0101613a5c565b845250918601918601613d27565b508096505050505050509250929050565b600080600080600060a08688031215613d8457600080fd5b8535613d8f8161396d565b9450613d9d602087016139af565b93506040860135613dad816138c7565b925060608601359150613c9d608087016139af565b600080600080600080600060e0888a031215613ddd57600080fd5b8735613de88161396d565b96506020880135613df88161396d565b95506040880135613e088161396d565b9450613e16606089016139af565b93506080880135613e26816138c7565b925060a08801359150613e3b60c089016139af565b905092959891949750929550565b600080600060608486031215613e5e57600080fd5b613e67846139af565b92506020840135613e77816138c7565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b81811015613ec657835163ffffffff1683529284019291840191600101613ea4565b50909695505050505050565b600080600060608486031215613ee757600080fd5b8335613ef2816138c7565b9250613f00602085016139af565b915060408401356001600160401b03811115613f1b57600080fd5b613f2786828701613a5c565b9150509250925092565b60008060008060008060c08789031215613f4a57600080fd5b8635613f558161396d565b95506020870135613f658161396d565b9450613f73604088016139af565b93506060870135613f83816138c7565b925060808701359150613f9860a088016139af565b90509295509295509295565b6001600160a01b0391909116815260200190565b600080600060608486031215613fcd57600080fd5b613fd6846139c3565b92506020840135613fe68161396d565b9150613ff4604085016139c3565b90509250925092565b6000806000806080858703121561401357600080fd5b61401c856139af565b9350602085013561402c816138c7565b925060408501359150614041606086016139af565b905092959194509250565b6020815261406360208201835163ffffffff169052565b60006020830151614079604084018260ff169052565b50604083015160ff8116606084015250606083015161409d608084018260040b9052565b5060808301516140b260a084018260040b9052565b5060a08301516140c760c084018260040b9052565b5060c08301516101408060e08501526140e461016085018361385f565b915060e08501516101006140ff8187018363ffffffff169052565b86015190506101206141158682018360ff169052565b909501516001600160e01b03191693019290925250919050565b60006020828403121561414157600080fd5b813561389e816138c7565b6000806000806080858703121561416257600080fd5b843561416d816138c7565b9350602085013561417d816138c7565b9250604085013561418d816138c7565b9150606085013561419d816138c7565b939692955090935050565b600181811c908216806141bc57607f821691505b602082108114156141dd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156141f557600080fd5b8151801515811461389e57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561422d57600080fd5b815161389e816138c7565b60006020828403121561424a57600080fd5b815161389e8161396d565b634e487b7160e01b600052601160045260246000fd5b600060001982141561427f5761427f614255565b5060010190565b60008160040b8360040b6000821282647fffffffff038213811516156142ae576142ae614255565b82647fffffffff190382128116156142c8576142c8614255565b50019392505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b6000602080838503121561430b57600080fd5b82516001600160401b0381111561432157600080fd5b8301601f8101851361433257600080fd5b8051614340613ade8261398c565b81815260079190911b8201830190838101908783111561435f57600080fd5b928401925b82841015611152576080848903121561437d5760008081fd5b6143856138f2565b84516143908161396d565b81528486015161439f816138c7565b818701526040858101519082015260608086015190820152825260809093019290840190614364565b600060ff821660ff84168060ff038211156143e5576143e5614255565b019392505050565b60008160040b8360040b647fffffffff60008213600084138383048511828216161561441b5761441b614255565b647fffffffff19600085128281168783058712161561443c5761443c614255565b6000871292508582058712848416161561445857614458614255565b8585058712818416161561446e5761446e614255565b5050509290910295945050505050565b634e487b7160e01b600052601260045260246000fd5b60008160040b8360040b806144ab576144ab61447e565b647fffffffff198214600019821416156144c7576144c7614255565b90059392505050565b600083516144e2818460208801613833565b600b60fa1b9083019081528351614500816001840160208801613833565b01600101949350505050565b60008282101561451e5761451e614255565b500390565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600063ffffffff838116908316818110156145a1576145a1614255565b039392505050565b600063ffffffff808416806145c0576145c061447e565b92169190910492915050565b600063ffffffff8083168185168083038211156145eb576145eb614255565b01949350505050565b600063ffffffff8083168181141561460e5761460e614255565b6001019392505050565b600063ffffffff82168061462e5761462e614255565b600019019291505056fe5f70726f63657373546f6b656e4174747220706172656e74417474724964206e6f7420657869737420696e2064696374696f6e617279757064617465436c7573746572546f6b656e4964417474724c69737420617474724964206e6f7420657869737420696e2064696374696f6e6172795f70726f63657373546f6b656e417474722064657461636820706172656e74417474724964206e6f7420657869737420696e2064696374696f6e6172795f70726f63657373546f6b656e4174747220706172656e74417474724964206e6f74206578697374206f6e207468697320746f6b656e5f70726f63657373546f6b656e4174747220617474724964206e6f7420657869737420696e2064696374696f6e6172795f70726f63657373546f6b656e417474722064657461636820706172656e74417474724964206e6f74206578697374206f6e207468697320746f6b656ea2646970667358221220dcb5659be65ad2ff036d33443772fbdf4628ff395aa6a8dd5d7401709739046d64736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101595760003560e01c80636a8efeb6116100c95780636a8efeb6146102f25780636a9b94b114610327578063715018a61461033a57806374bbd42e146103425780637f55cbe3146103555780638da5cb5b146103785780639a5bdf8a14610391578063b782465a146103f9578063c61b53f71461040c578063cb2a77a21461042f578063e69c707014610442578063f264eac514610462578063f2fde38b14610485578063f8c8765e1461049857600080fd5b806301a554c21461015e5780630596af851461018757806308c21f2a146101af5780630cf825af146101c45780631a9c6415146101f35780632abe18e5146102295780632d003dea1461023c57806334c76b251461024f57806336b6fdea146102845780633d8239a1146102975780633f41ee02146102b857806354fd4d50146102d85780635f0bdd02146102df575b600080fd5b61017161016c36600461381a565b6104ab565b60405161017e919061388b565b60405180910390f35b61019a6101953660046138a5565b610545565b60405163ffffffff909116815260200161017e565b6101c26101bd366004613bfa565b61058e565b005b6101d76101d2366004613c49565b610616565b6040805160ff909316835260049190910b60208301520161017e565b61021661020136600461381a565b606f6020526000908152604090205460040b81565b60405160049190910b815260200161017e565b6101c2610237366004613ca9565b61065a565b61021661024a366004613d6c565b610d7a565b60408051808201909152601981527821b63ab9ba32b920ba3a3934b13aba32a0b932b0aa37b5b2b760391b6020820152610171565b610216610292366004613dc2565b610fae565b6102aa6102a5366004613c49565b61115d565b60405190815260200161017e565b6102cb6102c6366004613e49565b6111c5565b60405161017e9190613e88565b60016102aa565b6101c26102ed366004613ed2565b611282565b61031561030036600461381a565b606c6020526000908152604090205460ff1681565b60405160ff909116815260200161017e565b610216610335366004613f31565b611307565b6101c2611326565b61019a6103503660046138a5565b61133a565b61031561036336600461381a565b60716020526000908152604090205460ff1681565b6033546001600160a01b031660405161017e9190613fa4565b6103a461039f366004613c49565b611356565b60405161017e9190600060a08201905063ffffffff80845116835260ff6020850151166020840152604084015160040b60408401528060608501511660608401525060ff608084015116608083015292915050565b610216610407366004613fb8565b6113d3565b61021661041a36600461381a565b606e6020526000908152604090205460040b81565b6102cb61043d366004613ffd565b61142a565b610455610450366004613c49565b6114d0565b60405161017e919061404c565b61021661047036600461381a565b606d6020526000908152604090205460040b81565b6101c261049336600461412f565b611614565b6101c26104a636600461414c565b61168d565b607060205260009081526040902080546104c4906141a8565b80601f01602080910402602001604051908101604052809291908181526020018280546104f0906141a8565b801561053d5780601f106105125761010080835404028352916020019161053d565b820191906000526020600020905b81548152906001019060200180831161052057829003601f168201915b505050505081565b606a602052816000526040600020818154811061056157600080fd5b9060005260206000209060089182820401919006600402915091509054906101000a900463ffffffff1681565b6066546001600160a01b031633146106065760405162461bcd60e51b815260206004820152603060248201527f63616c6c20757064617465546f6b656e496444656c7461417474724c6973742060448201526f6d75737420636c75737465724172656160801b60648201526084015b60405180910390fd5b610612826000836117f4565b5050565b6000806000610628888888888861115d565b6000908152606c6020908152604080832054606d9092529091205460ff909116935060040b9150509550959350505050565b63ffffffff82161561076757606754604080516378d0973360e11b815263ffffffff851660048201526002602482015233604482015290516001600160a01b039092169163f1a12e6691606480820192602092909190829003018186803b1580156106c457600080fd5b505afa1580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc91906141e3565b6107675760405162461bcd60e51b815260206004820152603660248201527f63616c6c20757064617465436c7573746572546f6b656e4964417474724c69736044820152753a1036bab9ba1031b63ab9ba32b92232b83637bcb2b960511b60648201526084016105fd565b60005b8151811015610d7557600082828151811061078757610787614205565b6020026020010151905060008463ffffffff16600014156108b8576107b4826000015183604001516118ef565b606854835160405163b9caf9d960e01b81529293506000926001600160a01b039092169163b9caf9d9916107ea91600401613fa4565b60206040518083038186803b15801561080257600080fd5b505afa158015610816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083a919061421b565b90506001600160a01b03811633146108b25760405162461bcd60e51b815260206004820152603560248201527f757064617465436c7573746572546f6b656e4964417474724c6973743a206d73604482015274339739b2b73232b9103737ba103232b83637bcb2b960591b60648201526084016105fd565b506108ce565b6108cb858360000151846040015161192d565b90505b60005b826060015151811015610d615760008063ffffffff88166109d857600061091d86600001518760600151868151811061090c5761090c614205565b602002602001015160000151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b15801561096257600080fd5b505afa158015610976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099a9190614238565b91506109d086600001518760400151886060015187815181106109bf576109bf614205565b60200260200101516000015161198f565b925050610abd565b6000610a0589876060015186815181106109f4576109f4614205565b6020026020010151600001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015610a4a57600080fd5b505afa158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a829190614238565b9150610ab9898760000151886040015189606001518881518110610aa857610aa8614205565b6020026020010151600001516119e4565b9250505b60ff8116600114801590610ad5575060ff8116600214155b8015610ae5575060ff8116600b14155b8015610af5575060ff8116600c14155b15610b6d576000610b4d6040518060600160405280603b815260200161466f603b9139610b4888606001518781518110610b3157610b31614205565b60200260200101516000015163ffffffff16611a3c565b611a4d565b90610b6b5760405162461bcd60e51b81526004016105fd919061388b565b505b6000828152607160205260408120546060870151805160ff909216929186908110610b9a57610b9a614205565b602002602001015160c001519050600b60ff168260ff161415610c3c5760ff8116600c14610c3c5760405162461bcd60e51b815260206004820152604360248201527f757064617465436c7573746572546f6b656e4964417474724c697374206d757360448201527f7420656e61626c6520666f726576657220746f2064697361626c6520666f72656064820152623b32b960e91b608482015260a4016105fd565b60ff8216600c1415610ccd5760ff8116600b14610ccd5760405162461bcd60e51b815260206004820152604360248201527f757064617465436c7573746572546f6b656e4964417474724c697374206d757360448201527f742064697361626c6520666f726576657220746f20656e61626c6520666f72656064820152623b32b960e91b608482015260a4016105fd565b60ff8216600b14801590610ce5575060ff8216600c14155b15610d4c57610d1b8a886000015189604001518a606001518981518110610d0e57610d0e614205565b6020026020010151611a79565b610d4c8a886000015189604001518a606001518981518110610d3f57610d3f614205565b6020026020010151612f84565b5050505080610d5a9061426b565b90506108d1565b50505080610d6e9061426b565b905061076a565b505050565b600080610d8b86868660008761115d565b6000818152606d602052604081205491925060049190910b90610db08888888861142a565b60408051600280825260608201835292935060019260009260208301908036833701905050905060ff8b1660021415610e3e5760029150600281600081518110610dfc57610dfc614205565b602002602001019060ff16908160ff1681525050600381600181518110610e2557610e25614205565b602002602001019060ff16908160ff1681525050610ecd565b60ff8b1660011415610e8c5760029150600381600081518110610e6357610e63614205565b602002602001019060ff16908160ff1681525050600281600181518110610e2557610e25614205565b60ff8b1660031415610ecd57610ea18361319e565b9250600081600081518110610eb857610eb8614205565b602002602001019060ff16908160ff16815250505b60005b8260ff16811015610f9e5760005b8451811015610f8d576000858281518110610efb57610efb614205565b60200260200101519050600080610f158f8f8f8f87610616565b91509150600060ff1686600081518110610f3157610f31614205565b602002602001015160ff161480610f665750858581518110610f5557610f55614205565b602002602001015160ff168260ff16145b15610f7957610f768983836113d3565b98505b50505080610f869061426b565b9050610ede565b50610f978161426b565b9050610ed0565b50929a9950505050505050505050565b600080610fbe8987878787610d7a565b610fc89082614286565b90508760ff168760ff161415610fdf579050611152565b606754604080516377b2ecf960e11b815290516000926001600160a01b03169163ef65d9f2916004808301926020929190829003018186803b15801561102457600080fd5b505afa158015611038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105c919061421b565b6001600160a01b031663de2291948888886040518463ffffffff1660e01b815260040161108b939291906142d1565b60006040518083038186803b1580156110a357600080fd5b505afa1580156110b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110df91908101906142f8565b905060005b815181101561114c57600082828151811061110157611101614205565b6020026020010151905061112e8c8c8c600161111d91906143c8565b8c856020015186604001518c610fae565b6111389085614286565b935050806111459061426b565b90506110e4565b50909150505b979650505050505050565b60008063ffffffff84166111945763ffffffff87166111885761118186868561198f565b90506111bb565b611181878787866119e4565b63ffffffff87166111ab57611181868686866131bd565b6111b887878787876131f5565b90505b9695505050505050565b6060600063ffffffff85166111e5576111de84846118ef565b90506111f3565b6111f085858561192d565b90505b6000818152606a60209081526040918290208054835181840281018401909452808452909183018282801561127357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116112365790505b50505050509150509392505050565b6066546001600160a01b031633146112fc5760405162461bcd60e51b815260206004820152603760248201527f63616c6c20757064617465436c7573746572546f6b656e496444656c7461417460448201527674724c697374206d75737420636c75737465724172656160481b60648201526084016105fd565b610d758383836117f4565b60008061131a8888600089898989610fae565b98975050505050505050565b61132e613255565b61133860006132af565b565b606b602052816000526040600020818154811061056157600080fd5b61135e6136ce565b600061136d878787878761115d565b90506113776136ce565b63ffffffff93841681526000828152606c602090815260408083205460ff90811683860152858452606d83528184205460040b828601529790961660608401529281526071909252929020549092166080820152949350505050565b600060ff831660031415611409576127106113ee8382614286565b6113f890866143ed565b6114029190614494565b9350611422565b60ff8316600214156114225761141f8285614286565b93505b509192915050565b6060600061143c86868660008761115d565b6000818152606b602090815260409182902080548351818402810184019094528084529394509192908301828280156114c057602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116114835790505b5050505050915050949350505050565b6114d86136fc565b60006114e7878787878761115d565b90506114f16136fc565b63ffffffff8085168252851660e082015260006020808301829052838252606c815260408083205460ff1681850152848352606d825280832054600490810b6060860152858452606e835281842054810b6080860152858452606f835281842054900b60a085015284835260709091529020805461156e906141a8565b80601f016020809104026020016040519081016040528092919081815260200182805461159a906141a8565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b505050505060c08201526000918252607160205260409091205460ff166101008201529695505050505050565b61161c613255565b6001600160a01b0381166116815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105fd565b61168a816132af565b50565b600054610100900460ff16158080156116ad5750600054600160ff909116105b806116c75750303b1580156116c7575060005460ff166001145b61172a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105fd565b6000805460ff19166001179055801561174d576000805461ff0019166101001790555b611755613301565b61175d613328565b606680546001600160a01b038086166001600160a01b0319928316179092556067805488841690831617905560688054878416908316179055606980549285169290911691909117905580156117ed576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b602081015160ff166002141561180957611881565b602081015160ff166003141561181e57611881565b60405162461bcd60e51b815260206004820152603260248201527f5f757064617465546f6b656e496444656c7461417474724c69737420657263206044820152716973206e6f7420373231206f72203131353560701b60648201526084016105fd565b60005b8160600151518110156118e9576118b5838360000151846040015185606001518581518110610d0e57610d0e614205565b6118d9838360000151846040015185606001518581518110610d3f57610d3f614205565b6118e28161426b565b9050611884565b50505050565b604080516001600160a01b03841660208201529081018290526000906060015b60405160208183030381529060405280519060200120905092915050565b6000838383604051602001611944939291906142d1565b6040516020818303038152906040528051906020012090509392505050565b604080516001600160a01b038416602082015263ffffffff83169181019190915260009060600161190f565b604080516001600160a01b038516602082015290810183905263ffffffff82166060820152600090608001611944565b6040805163ffffffff808516602083015283169181019190915260009060600161190f565b6040805163ffffffff80871660208301526001600160a01b0386169282019290925260608101849052908216608082015260009060a0015b604051602081830303815290604052805190602001209050949350505050565b6060611a4782613358565b92915050565b60608282604051602001611a629291906144d0565b604051602081830303815290604052905092915050565b6000806000606560ff16846020015160ff161480611a9e5750602084015160ff166066145b80611ab05750602084015160ff166067145b15611b67576000611ac5878660000151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015611b0a57600080fd5b505afa158015611b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b429190614238565b9250611b4e87876118ef565b9150611b5f8787876000015161198f565b935050611c17565b6000611b778886600001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015611bbc57600080fd5b505afa158015611bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf49190614238565b9250611c0188888861192d565b9150611c1388888888600001516119e4565b9350505b60ff8216611c6e576000611c4e60405180606001604052806030815260200161471d603091398651610b489063ffffffff16611a3c565b90611c6c5760405162461bcd60e51b81526004016105fd919061388b565b505b602084015160ff1660011480611c8b5750602084015160ff166065145b156120c0576000838152606e6020908152604080832054606f909252918290205491860151600491820b9290910b9060ff1660011415611e245760008581526071602052604090205460ff16611d7d576000838152606a60209081526040808320895181546001810183559185528385206008830401805463ffffffff92831660046007909516949094026101000a938402929093021990921617905588810151888452606c8352818420805460ff92831660ff199182161790915560c08b015160718552838620805491909316911617905560808901516070835292208251611d7b939192919091019061374f565b505b8160040b6000148015611d9357508060040b6000145b15611dc95760608601516000868152606d60205260409020805464ffffffffff191664ffffffffff9092169190911790556120b9565b856060015160040b8260040b13158015611ded57508060040b866060015160040b13155b15611e1f5760608601516000868152606d60205260409020805464ffffffffff191664ffffffffff9092169190911790555b6120b9565b604086015160ff1660021415611f645760008581526071602052604090205460ff16611e4f576120b9565b60608601516000868152606d602052604081208054909190611e7590849060040b614286565b92506101000a81548164ffffffffff021916908360040b64ffffffffff1602179055508160040b6000141580611eaf57508060040b600014155b15611e1f576000866060015160040b138015611edf57506000858152606d6020526040902054600482810b91900b135b15611f0c576000858152606d60205260409020805464ffffffffff191664ffffffffff83161790556120b9565b6000866060015160040b128015611f3757506000858152606d6020526040902054600483810b91900b125b15611e1f576000858152606d60205260409020805464ffffffffff191664ffffffffff84161790556120b9565b604086015160ff16600314156120b95760008581526071602052604090205460ff16611f8f576120b9565b6127108660600151612710611fa49190614286565b6000878152606d6020526040902054611fc0919060040b6143ed565b611fca9190614494565b6000868152606d60205260409020805464ffffffffff191664ffffffffff92909216919091179055600482900b15158061200857508060040b600014155b156120b9576000866060015160040b13801561203857506000858152606d6020526040902054600482810b91900b135b15612065576000858152606d60205260409020805464ffffffffff191664ffffffffff83161790556120b9565b6000866060015160040b12801561209057506000858152606d6020526040902054600483810b91900b125b156120b9576000858152606d60205260409020805464ffffffffff191664ffffffffff84161790555b5050612f7b565b602084015160ff16600214806120dd5750602084015160ff166066145b1561262e57600080606660ff16866020015160ff16141561219e576000612108898860a00151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b15801561214d57600080fd5b505afa158015612161573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121859190614238565b915061219689898960a0015161198f565b925050612241565b60006121ae8a8860a001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222b9190614238565b915061223d8a8a8a8a60a001516119e4565b9250505b60ff811615801561225c575060008660a0015163ffffffff16115b156122b257600061229260405180606001604052806036815260200161463960369139610b488960a0015163ffffffff16611a3c565b906122b05760405162461bcd60e51b81526004016105fd919061388b565b505b60008281526071602052604090205460ff161580156122db575060008660a0015163ffffffff16115b156123315760006123116040518060600160405280603681526020016146e760369139610b488960a0015163ffffffff16611a3c565b9061232f5760405162461bcd60e51b81526004016105fd919061388b565b505b60a086015163ffffffff16156124dc576000828152606b60205260408120905b81548110156123b657876000015163ffffffff1682828154811061237757612377614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1614156123a6576123b6565b6123af8161426b565b9050612351565b81548114156124d55787518254600181018455600084815260208082206008840401805460079094166004026101000a63ffffffff81810219909516949095169490940292909217909255890151606660ff909116141561242c576124258b8b8b60a001518c600001516131bd565b9050612444565b6124418c8c8c8c60a001518d600001516131f5565b90505b6040898101516000838152606c6020908152838220805460ff191660ff9094169390931790925560608c0151606d8352838220805464ffffffffff191664ffffffffff90921691909117905560808c01516070835292902082516124ae939192919091019061374f565b5060c0890151600091825260716020526040909120805460ff191660ff9092169190911790555b50506120b9565b6000838152606a60205260408120905b815481101561255157876000015163ffffffff1682828154811061251257612512614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16141561254157612551565b61254a8161426b565b90506124ec565b81548114156126255787518254600181018455600084815260208082206008840401805460079094166004026101000a63ffffffff818102199095169490951694909402929092179092556040808b01518a8452606c8352818420805460ff191660ff90921691909117905560608b0151606d8352818420805464ffffffffff191664ffffffffff90921691909117905560808b015160708352922082516125ff939192919091019061374f565b5060c08801516000888152607160205260409020805460ff191660ff9092169190911790555b50505050612f7b565b602084015160ff166003148061264b5750602084015160ff166067145b15612cc85760a084015163ffffffff166128fd576000818152606a60209081526040808320868452606b909252822090915b82548110156127fd57866000015163ffffffff168382815481106126a3576126a3614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1614156127ed57825483906126dd9060019061450c565b815481106126ed576126ed614205565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1683828154811061272557612725614205565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280548061276857612768614523565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a021916905591909255878252606c81526040808320805460ff199081169091556071835281842080549091169055607090915281206127ce916137cf565b6000868152606d60205260409020805464ffffffffff191690556127fd565b6127f68161426b565b905061267d565b50805460005b818110156126255760006128558c8c8c8c6000015188878154811061282a5761282a614205565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff166131f5565b6000818152606c60209081526040808320805460ff1990811690915560718352818420805490911690556070909152812091925061289391906137cf565b6000818152606d60205260409020805464ffffffffff1916905583548490806128be576128be614523565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a02191690559055506128f68161426b565b9050612803565b600080606760ff16866020015160ff1614156129b9576000612923898860a00151611963565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b15801561296857600080fd5b505afa15801561297c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a09190614238565b91506129b189898960a0015161198f565b925050612a5c565b60006129c98a8860a001516119bf565b606954604051638c91c7a760e01b8152600481018390529192506001600160a01b031690638c91c7a79060240160206040518083038186803b158015612a0e57600080fd5b505afa158015612a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a469190614238565b9150612a588a8a8a8a60a001516119e4565b9250505b60ff8116612ab5576000612a956040518060600160405280603d81526020016146aa603d9139610b488960a0015163ffffffff16611a3c565b90612ab35760405162461bcd60e51b81526004016105fd919061388b565b505b60008281526071602052604090205460ff16612b1c576000612afc6040518060600160405280603d815260200161474d603d9139610b488960a0015163ffffffff16611a3c565b90612b1a5760405162461bcd60e51b81526004016105fd919061388b565b505b6000828152606b60205260408120905b815481101561262557876000015163ffffffff16828281548110612b5257612b52614205565b6000918252602090912060088204015460079091166004026101000a900463ffffffff161415612cb85781548290612b8c9060019061450c565b81548110612b9c57612b9c614205565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16828281548110612bd457612bd4614205565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555081805480612c1757612c17614523565b600082815260208120600860001990930192830401805463ffffffff600460078616026101000a0219169055915560a08901518951612c5b918e918e918e916131f5565b6000818152606c60209081526040808320805460ff19908116909155607183528184208054909116905560709091528120919250612c9991906137cf565b6000908152606d60205260409020805464ffffffffff19169055612625565b612cc18161426b565b9050612b2c565b602084015160ff1660051480612ce55750602084015160ff166069145b15612e3857604084015160ff1660011415612d2b5760608401516000848152606e60205260409020805464ffffffffff191664ffffffffff909216919091179055612f7b565b604084015160ff1660021415612da45760008381526071602052604090205460ff16612d5657612f7b565b60608401516000848152606e602052604081208054909190612d7c90849060040b614286565b92506101000a81548164ffffffffff021916908360040b64ffffffffff160217905550612f7b565b604084015160ff1660031415612e335760008381526071602052604090205460ff16612dcf57612f7b565b6127108460600151612710612de49190614286565b6000858152606e6020526040902054612e00919060040b6143ed565b612e0a9190614494565b6000848152606e60205260409020805464ffffffffff191664ffffffffff929092169190911790555b612f7b565b602084015160ff1660061480612e555750602084015160ff16606a145b15612f7b57604084015160ff1660011415612e9b5760608401516000848152606f60205260409020805464ffffffffff191664ffffffffff909216919091179055612f7b565b604084015160ff1660021415612eec5760008381526071602052604090205460ff16612ec657612f7b565b60608401516000848152606f602052604081208054909190612d7c90849060040b614286565b604084015160ff1660031415612f7b5760008381526071602052604090205460ff16612f1757612f7b565b6127108460600151612710612f2c9190614286565b6000858152606f6020526040902054612f48919060040b6143ed565b612f529190614494565b6000848152606f60205260409020805464ffffffffff191664ffffffffff929092169190911790555b50505050505050565b600080606560ff16836020015160ff161480612fa75750602083015160ff166066145b80612fb95750602083015160ff166067145b156130665760695483516001600160a01b0390911690638c91c7a790612fe0908890611963565b6040518263ffffffff1660e01b8152600401612ffe91815260200190565b60206040518083038186803b15801561301657600080fd5b505afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304e9190614238565b905061305f8585856000015161198f565b915061310b565b60695483516001600160a01b0390911690638c91c7a7906130889089906119bf565b6040518263ffffffff1660e01b81526004016130a691815260200190565b60206040518083038186803b1580156130be57600080fd5b505afa1580156130d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f69190614238565b905061310886868686600001516119e4565b91505b825160a0808501516000858152606d602090815260409182902054825163ffffffff8d811682526001600160a01b038d16938201939093528084018b905295821660608701529216608085015260ff85169284019290925260040b60c0830152517f9af4ac7f337a74edeb4ec2cbeb6fd5a7b8065b51fd04e009420c273f8fb2be2f9181900360e00190a1505050505050565b60606131b9826000600185516131b4919061450c565b6133f4565b5090565b604080516001600160a01b038616602082015290810184905263ffffffff80841660608301528216608082015260009060a001611a1c565b6040805163ffffffff80881660208301526001600160a01b0387169282019290925260608101859052818416608082015290821660a082015260009060c00160405160208183030381529060405280519060200120905095945050505050565b6033546001600160a01b031633146113385760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105fd565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113385760405162461bcd60e51b81526004016105fd90614539565b600054610100900460ff1661334f5760405162461bcd60e51b81526004016105fd90614539565b611338336132af565b60606000613365836135f8565b60010190506000816001600160401b03811115613384576133846138dc565b6040519080825280601f01601f1916602001820160405280156133ae576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846133e7576133ec565b6133b8565b509392505050565b818163ffffffff808316908216141561340e575050505050565b600085600261341d8787614584565b61342791906145a9565b61343190876145cc565b63ffffffff168151811061344757613447614205565b602002602001015190505b8163ffffffff168363ffffffff16116135b2575b8063ffffffff16868463ffffffff168151811061348557613485614205565b602002602001015163ffffffff1610156134ab57826134a3816145f4565b935050613466565b858263ffffffff16815181106134c3576134c3614205565b602002602001015163ffffffff168163ffffffff1610156134f057816134e881614618565b9250506134ab565b8163ffffffff168363ffffffff16116135ad57858263ffffffff168151811061351b5761351b614205565b6020026020010151868463ffffffff168151811061353b5761353b614205565b6020026020010151878563ffffffff168151811061355b5761355b614205565b60200260200101888563ffffffff168151811061357a5761357a614205565b63ffffffff9384166020918202929092010152911690528261359b816145f4565b93505081806135a990614618565b9250505b613452565b8163ffffffff168563ffffffff1610156135d1576135d18686846133f4565b8363ffffffff168363ffffffff1610156135f0576135f08684866133f4565b505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106136375772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613661576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061367f57662386f26fc10000830492506010015b6305f5e1008310613697576305f5e100830492506008015b61271083106136ab57612710830492506004015b606483106136bd576064830492506002015b600a8310611a475760010192915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052610100810182905261012081019190915290565b82805461375b906141a8565b90600052602060002090601f01602090048101928261377d57600085556137c3565b82601f1061379657805160ff19168380011785556137c3565b828001600101855582156137c3579182015b828111156137c35782518255916020019190600101906137a8565b506131b9929150613805565b5080546137db906141a8565b6000825580601f106137eb575050565b601f01602090049060005260206000209081019061168a91905b5b808211156131b95760008155600101613806565b60006020828403121561382c57600080fd5b5035919050565b60005b8381101561384e578181015183820152602001613836565b838111156118e95750506000910152565b60008151808452613877816020860160208601613833565b601f01601f19169290920160200192915050565b60208152600061389e602083018461385f565b9392505050565b600080604083850312156138b857600080fd5b50508035926020909101359150565b6001600160a01b038116811461168a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613914576139146138dc565b60405290565b60405161010081016001600160401b0381118282101715613914576139146138dc565b604051601f8201601f191681016001600160401b0381118282101715613965576139656138dc565b604052919050565b60ff8116811461168a57600080fd5b80356139878161396d565b919050565b60006001600160401b038211156139a5576139a56138dc565b5060051b60200190565b803563ffffffff8116811461398757600080fd5b8035600481900b811461398757600080fd5b600082601f8301126139e657600080fd5b81356001600160401b038111156139ff576139ff6138dc565b613a12601f8201601f191660200161393d565b818152846020838601011115613a2757600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160e01b03198116811461398757600080fd5b600060808284031215613a6e57600080fd5b613a766138f2565b90508135613a83816138c7565b8152602082810135613a948161396d565b828201526040838101359083015260608301356001600160401b0380821115613abc57600080fd5b818501915085601f830112613ad057600080fd5b8135613ae3613ade8261398c565b61393d565b81815260059190911b83018401908481019088831115613b0257600080fd5b8585015b83811015613be857803585811115613b1e5760008081fd5b8601610100818c03601f1901811315613b375760008081fd5b613b3f61391a565b613b4a8a84016139af565b8152613b586040840161397c565b8a820152613b686060840161397c565b6040820152613b79608084016139c3565b606082015260a08084013589811115613b925760008081fd5b613ba08f8d838801016139d5565b60808401525060c0613bb38186016139af565b8284015260e09150613bc682860161397c565b90830152613bd5848401613a44565b9082015285525050918601918601613b06565b50606087015250939695505050505050565b60008060408385031215613c0d57600080fd5b8235613c18816138c7565b915060208301356001600160401b03811115613c3357600080fd5b613c3f85828601613a5c565b9150509250929050565b600080600080600060a08688031215613c6157600080fd5b613c6a866139af565b94506020860135613c7a816138c7565b935060408601359250613c8f606087016139af565b9150613c9d608087016139af565b90509295509295909350565b60008060408385031215613cbc57600080fd5b613cc5836139af565b91506020808401356001600160401b0380821115613ce257600080fd5b818601915086601f830112613cf657600080fd5b8135613d04613ade8261398c565b81815260059190911b83018401908481019089831115613d2357600080fd5b8585015b83811015613d5b57803585811115613d3f5760008081fd5b613d4d8c89838a0101613a5c565b845250918601918601613d27565b508096505050505050509250929050565b600080600080600060a08688031215613d8457600080fd5b8535613d8f8161396d565b9450613d9d602087016139af565b93506040860135613dad816138c7565b925060608601359150613c9d608087016139af565b600080600080600080600060e0888a031215613ddd57600080fd5b8735613de88161396d565b96506020880135613df88161396d565b95506040880135613e088161396d565b9450613e16606089016139af565b93506080880135613e26816138c7565b925060a08801359150613e3b60c089016139af565b905092959891949750929550565b600080600060608486031215613e5e57600080fd5b613e67846139af565b92506020840135613e77816138c7565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b81811015613ec657835163ffffffff1683529284019291840191600101613ea4565b50909695505050505050565b600080600060608486031215613ee757600080fd5b8335613ef2816138c7565b9250613f00602085016139af565b915060408401356001600160401b03811115613f1b57600080fd5b613f2786828701613a5c565b9150509250925092565b60008060008060008060c08789031215613f4a57600080fd5b8635613f558161396d565b95506020870135613f658161396d565b9450613f73604088016139af565b93506060870135613f83816138c7565b925060808701359150613f9860a088016139af565b90509295509295509295565b6001600160a01b0391909116815260200190565b600080600060608486031215613fcd57600080fd5b613fd6846139c3565b92506020840135613fe68161396d565b9150613ff4604085016139c3565b90509250925092565b6000806000806080858703121561401357600080fd5b61401c856139af565b9350602085013561402c816138c7565b925060408501359150614041606086016139af565b905092959194509250565b6020815261406360208201835163ffffffff169052565b60006020830151614079604084018260ff169052565b50604083015160ff8116606084015250606083015161409d608084018260040b9052565b5060808301516140b260a084018260040b9052565b5060a08301516140c760c084018260040b9052565b5060c08301516101408060e08501526140e461016085018361385f565b915060e08501516101006140ff8187018363ffffffff169052565b86015190506101206141158682018360ff169052565b909501516001600160e01b03191693019290925250919050565b60006020828403121561414157600080fd5b813561389e816138c7565b6000806000806080858703121561416257600080fd5b843561416d816138c7565b9350602085013561417d816138c7565b9250604085013561418d816138c7565b9150606085013561419d816138c7565b939692955090935050565b600181811c908216806141bc57607f821691505b602082108114156141dd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156141f557600080fd5b8151801515811461389e57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561422d57600080fd5b815161389e816138c7565b60006020828403121561424a57600080fd5b815161389e8161396d565b634e487b7160e01b600052601160045260246000fd5b600060001982141561427f5761427f614255565b5060010190565b60008160040b8360040b6000821282647fffffffff038213811516156142ae576142ae614255565b82647fffffffff190382128116156142c8576142c8614255565b50019392505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b6000602080838503121561430b57600080fd5b82516001600160401b0381111561432157600080fd5b8301601f8101851361433257600080fd5b8051614340613ade8261398c565b81815260079190911b8201830190838101908783111561435f57600080fd5b928401925b82841015611152576080848903121561437d5760008081fd5b6143856138f2565b84516143908161396d565b81528486015161439f816138c7565b818701526040858101519082015260608086015190820152825260809093019290840190614364565b600060ff821660ff84168060ff038211156143e5576143e5614255565b019392505050565b60008160040b8360040b647fffffffff60008213600084138383048511828216161561441b5761441b614255565b647fffffffff19600085128281168783058712161561443c5761443c614255565b6000871292508582058712848416161561445857614458614255565b8585058712818416161561446e5761446e614255565b5050509290910295945050505050565b634e487b7160e01b600052601260045260246000fd5b60008160040b8360040b806144ab576144ab61447e565b647fffffffff198214600019821416156144c7576144c7614255565b90059392505050565b600083516144e2818460208801613833565b600b60fa1b9083019081528351614500816001840160208801613833565b01600101949350505050565b60008282101561451e5761451e614255565b500390565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600063ffffffff838116908316818110156145a1576145a1614255565b039392505050565b600063ffffffff808416806145c0576145c061447e565b92169190910492915050565b600063ffffffff8083168185168083038211156145eb576145eb614255565b01949350505050565b600063ffffffff8083168181141561460e5761460e614255565b6001019392505050565b600063ffffffff82168061462e5761462e614255565b600019019291505056fe5f70726f63657373546f6b656e4174747220706172656e74417474724964206e6f7420657869737420696e2064696374696f6e617279757064617465436c7573746572546f6b656e4964417474724c69737420617474724964206e6f7420657869737420696e2064696374696f6e6172795f70726f63657373546f6b656e417474722064657461636820706172656e74417474724964206e6f7420657869737420696e2064696374696f6e6172795f70726f63657373546f6b656e4174747220706172656e74417474724964206e6f74206578697374206f6e207468697320746f6b656e5f70726f63657373546f6b656e4174747220617474724964206e6f7420657869737420696e2064696374696f6e6172795f70726f63657373546f6b656e417474722064657461636820706172656e74417474724964206e6f74206578697374206f6e207468697320746f6b656ea2646970667358221220dcb5659be65ad2ff036d33443772fbdf4628ff395aa6a8dd5d7401709739046d64736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
