{
  "_format": "hh-sol-artifact-1",
  "contractName": "PermissionedDisputeGame",
  "sourceName": "contracts/L1/dispute/PermissionedDisputeGame.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "Claim",
          "name": "_absolutePrestate",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_maxGameDepth",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_splitDepth",
          "type": "uint256"
        },
        {
          "internalType": "Duration",
          "name": "_clockExtension",
          "type": "uint64"
        },
        {
          "internalType": "Duration",
          "name": "_maxClockDuration",
          "type": "uint64"
        },
        {
          "internalType": "contract IBigStepper",
          "name": "_vm",
          "type": "address"
        },
        {
          "internalType": "contract IDelayedWETH",
          "name": "_weth",
          "type": "address"
        },
        {
          "internalType": "contract Lib_AddressManager",
          "name": "_addressManager",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_l2ChainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_proposer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_challenger",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AnchorRootNotFound",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BadAuth",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BlockNumberMatches",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BondTransferFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CannotDefendRootClaim",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClaimAboveSplit",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClaimAlreadyExists",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClaimAlreadyResolved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClockNotExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ClockTimeExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DuplicateStep",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "GameDepthExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "GameNotInProgress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IncorrectBondAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidChallengePeriod",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidClockExtension",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDisputedClaimIndex",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidHeaderRLP",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLocalIdent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidOutputRootProof",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidParent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidPrestate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSplitDepth",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "L2BlockNumberChallenged",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MaxDepthTooLarge",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoCreditToClaim",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OutOfOrderResolution",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "Claim",
          "name": "rootClaim",
          "type": "bytes32"
        }
      ],
      "name": "UnexpectedRootClaim",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ValidStep",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "parentIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "Claim",
          "name": "claim",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        }
      ],
      "name": "Move",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "enum GameStatus",
          "name": "status",
          "type": "uint8"
        }
      ],
      "name": "Resolved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "intendedRecipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "reason",
          "type": "bytes"
        }
      ],
      "name": "SlashingFailed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "absolutePrestate",
      "outputs": [
        {
          "internalType": "Claim",
          "name": "absolutePrestate_",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_ident",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_execLeafIdx",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_partOffset",
          "type": "uint256"
        }
      ],
      "name": "addLocalData",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Claim",
          "name": "_disputed",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_parentIndex",
          "type": "uint256"
        },
        {
          "internalType": "Claim",
          "name": "_claim",
          "type": "bytes32"
        }
      ],
      "name": "attack",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_OVMCodec.ChainBatchHeader",
          "name": "_outputRootProof",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "_headerRLP",
          "type": "bytes"
        }
      ],
      "name": "challengeRootL2Block",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "challenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "challenger_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        }
      ],
      "name": "claimCredit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "claimData",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "parentIndex",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "counteredBy",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "bond",
          "type": "uint128"
        },
        {
          "internalType": "Claim",
          "name": "claim",
          "type": "bytes32"
        },
        {
          "internalType": "Position",
          "name": "position",
          "type": "uint128"
        },
        {
          "internalType": "Clock",
          "name": "clock",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimDataLen",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "len_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Hash",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "claims",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clockExtension",
      "outputs": [
        {
          "internalType": "Duration",
          "name": "clockExtension_",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "createdAt",
      "outputs": [
        {
          "internalType": "Timestamp",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "credit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Claim",
          "name": "_disputed",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_parentIndex",
          "type": "uint256"
        },
        {
          "internalType": "Claim",
          "name": "_claim",
          "type": "bytes32"
        }
      ],
      "name": "defend",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "extraData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "extraData_",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gameCreator",
      "outputs": [
        {
          "internalType": "address",
          "name": "creator_",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gameData",
      "outputs": [
        {
          "internalType": "GameType",
          "name": "gameType_",
          "type": "uint32"
        },
        {
          "internalType": "Claim",
          "name": "rootClaim_",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "extraData_",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gameType",
      "outputs": [
        {
          "internalType": "GameType",
          "name": "gameType_",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_claimIndex",
          "type": "uint256"
        }
      ],
      "name": "getChallengerDuration",
      "outputs": [
        {
          "internalType": "Duration",
          "name": "duration_",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_claimIndex",
          "type": "uint256"
        }
      ],
      "name": "getNumToResolve",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "numRemainingChildren_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Position",
          "name": "_position",
          "type": "uint128"
        }
      ],
      "name": "getRequiredBond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "requiredBond_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l1Head",
      "outputs": [
        {
          "internalType": "Hash",
          "name": "l1Head_",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2BlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "l2BlockNumber_",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2BlockNumberChallenged",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2BlockNumberChallenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2ChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "l2ChainId_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxClockDuration",
      "outputs": [
        {
          "internalType": "Duration",
          "name": "maxClockDuration_",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxGameDepth",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "maxGameDepth_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "Claim",
          "name": "_disputed",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_challengeIndex",
          "type": "uint256"
        },
        {
          "internalType": "Claim",
          "name": "_claim",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "_isAttack",
          "type": "bool"
        }
      ],
      "name": "move",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposer",
      "outputs": [
        {
          "internalType": "address",
          "name": "proposer_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "resolutionCheckpoints",
      "outputs": [
        {
          "internalType": "bool",
          "name": "initialCheckpointComplete",
          "type": "bool"
        },
        {
          "internalType": "uint32",
          "name": "subgameIndex",
          "type": "uint32"
        },
        {
          "internalType": "Position",
          "name": "leftmostPosition",
          "type": "uint128"
        },
        {
          "internalType": "address",
          "name": "counteredBy",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "resolve",
      "outputs": [
        {
          "internalType": "enum GameStatus",
          "name": "status_",
          "type": "uint8"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_claimIndex",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_numToResolve",
          "type": "uint256"
        }
      ],
      "name": "resolveClaim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "resolvedAt",
      "outputs": [
        {
          "internalType": "Timestamp",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "resolvedSubgames",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rootClaim",
      "outputs": [
        {
          "internalType": "Claim",
          "name": "rootClaim_",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scc",
      "outputs": [
        {
          "internalType": "contract IMVMStateCommitmentChain",
          "name": "scc_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "splitDepth",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "splitDepth_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startingBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "startingBlockNumber_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startingOutputRoot",
      "outputs": [
        {
          "internalType": "Hash",
          "name": "root",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "l2BlockNumber",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startingRootHash",
      "outputs": [
        {
          "internalType": "Hash",
          "name": "startingRootHash_",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "status",
      "outputs": [
        {
          "internalType": "enum GameStatus",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_claimIndex",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_isAttack",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_stateData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_proof",
          "type": "bytes"
        }
      ],
      "name": "step",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "subgames",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vm",
      "outputs": [
        {
          "internalType": "contract IBigStepper",
          "name": "vm_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "weth",
      "outputs": [
        {
          "internalType": "contract IDelayedWETH",
          "name": "weth_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6102006040523480156200001257600080fd5b506040516200642838038062006428833981016040819052620000359162000469565b8b8b8b8b8b8b8b8b8b8b6200004d6001607e6200055c565b60ff168811156200007157604051633beff19960e11b815260040160405180910390fd5b6000198714806200008e5750876200008b88600162000582565b10155b15620000ad5760405163e62ccf3960e01b815260040160405180910390fd5b6002871015620000d05760405163e62ccf3960e01b815260040160405180910390fd5b6001600160401b038016846001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000119573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013f91906200059d565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200017d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a39190620005bd565b1115620001c35760405163b4e1243360e01b815260040160405180910390fd5b6000620001e4876001600160401b03166200040860201b620011861760201c565b620001fa906001600160401b03166002620005d7565b90506000856001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026391906200059d565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c79190620005bd565b620002e6896001600160401b03166200040860201b620011861760201c565b6001600160401b0316620002fb919062000582565b905060006200031683836200040b60201b6200265c1760201c565b90506001600160401b03811115620003415760405163235dfb2b60e21b815260040160405180910390fd5b62000360886001600160401b03166200040860201b620011861760201c565b6001600160401b0316816001600160401b03161115620003935760405163235dfb2b60e21b815260040160405180910390fd5b50505063ffffffff9099166101205260809790975260a09590955260c0939093526001600160401b039182166101a0521660e0526001600160a01b03908116610100529081166101405290811661016052610180919091529182166101c052166101e05250620005f998505050505050505050565b90565b6000818310156200041d57816200041f565b825b9392505050565b80516001600160401b03811681146200043e57600080fd5b919050565b6001600160a01b03811681146200045957600080fd5b50565b80516200043e8162000443565b6000806000806000806000806000806000806101808d8f0312156200048d57600080fd5b8c5163ffffffff81168114620004a257600080fd5b809c505060208d01519a5060408d0151995060608d01519850620004c960808e0162000426565b9750620004d960a08e0162000426565b9650620004e960c08e016200045c565b9550620004f960e08e016200045c565b94506200050a6101008e016200045c565b93506101208d01519250620005236101408e016200045c565b9150620005346101608e016200045c565b90509295989b509295989b509295989b565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168082101562000579576200057962000546565b90039392505050565b6000821982111562000598576200059862000546565b500190565b600060208284031215620005b057600080fd5b81516200041f8162000443565b600060208284031215620005d057600080fd5b5051919050565b6000816000190483118215151615620005f457620005f462000546565b500290565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051615c69620007bf6000396000818161053e01528181611c9701526121c601526000818161080301528181611c6501528181611d19015261219401526000818161068301528181612f7201528181612fdd015261301001526000818161099b0152818161259a015261357001526000818161166d0152818161186e01528181611a1e01526134d40152600081816104f801528181611b71015281816126f40152818161338201526139c001526000818161083e015261261c0152600081816104850152818161229c01528181612e8b01526142340152600081816109ee01528181610b9601528181611eaa01528181611eec01528181612dfb01528181613040015261309f015260008181610a210152818161244001528181612c4401528181612d6a01528181612fae015281816140ab015281816144d8015281816145b70152818161466a01528181614d910152614f79015260008181610ac801528181611fd80152818161205e01528181612d0d01528181612e5f01528181613fc301526140cc015260008181610730015261414f0152615c696000f3fe6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610a95578063fa315aa914610ab9578063fe2bbeb214610aec57600080fd5b8063ec5e630814610a12578063eff0f59214610a45578063f8f43ff614610a7557600080fd5b8063d6ae3cd5116100bb578063d6ae3cd51461098c578063d8cc1a3c146109bf578063dabd396d146109df57600080fd5b8063c6f0308c146108ca578063cf09e0d01461093e578063d5d44d801461095f57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610868578063bd8da9561461088a578063c395e1ca146108aa57600080fd5b8063a445ece614610754578063a8e4fb90146107f4578063bbdc02db1461082757600080fd5b80638980e0cc116101745780638980e0cc146106ea5780638b85902b146106ff5780638d450a951461072157600080fd5b806370872aa5146106ba5780637b0f0adc146106cf5780638129fc1c146106e257600080fd5b80633fc8cef31161025e5780635a5fa2d9116102075780636361506d116101e15780636361506d146106525780636b6716c0146106745780636f034409146106a757600080fd5b80635a5fa2d9146105fd578063609d33341461061d57806360e274641461063257600080fd5b8063543acd5011610238578063543acd501461056257806354fd4d501461057757806357da950e146105cd57600080fd5b80633fc8cef3146104e9578063472777c61461051c578063534db0e21461052f57600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b229146104545780633a768463146104765780633e3ac912146104a957600080fd5b80632810e1d6146103e75780632ad69aeb146103fc57806330dbe5701461041c57600080fd5b80631e31db5a116102f15780631e31db5a1461037a578063200d2ed21461039a57806325fc2ace146103c857600080fd5b806303c2924d1461030d57806319effeb41461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046152b5565b610b1c565b005b34801561033b57600080fd5b5060005461035c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561038657600080fd5b5061032d610395366004615320565b6110e0565b3480156103a657600080fd5b506000546103bb90600160801b900460ff1681565b60405161037191906153c0565b3480156103d457600080fd5b506008545b604051908152602001610371565b3480156103f357600080fd5b506103bb61141a565b34801561040857600080fd5b506103d96104173660046152b5565b611971565b34801561042857600080fd5b5060015461043c906001600160a01b031681565b6040516001600160a01b039091168152602001610371565b34801561046057600080fd5b503660011981013560f01c90033560601c61043c565b34801561048257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b3480156104b557600080fd5b506000546104d9907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610371565b3480156104f557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b61032d61052a366004615401565b6119a7565b34801561053b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b34801561056e57600080fd5b5061043c6119b9565b34801561058357600080fd5b506105c06040518060400160405280600a81526020017f312e332e302d72632e310000000000000000000000000000000000000000000081525081565b604051610371919061547a565b3480156105d957600080fd5b506008546009546105e8919082565b60408051928352602083019190915201610371565b34801561060957600080fd5b506103d961061836600461548d565b611a92565b34801561062957600080fd5b506105c0611acc565b34801561063e57600080fd5b5061032d61064d3660046154be565b611ada565b34801561065e57600080fd5b503660011981013560f01c9003603401356103d9565b34801561068057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061035c565b61032d6106b53660046154e9565b611c5a565b3480156106c657600080fd5b506009546103d9565b61032d6106dd366004615401565b611d01565b61032d611d0e565b3480156106f657600080fd5b506002546103d9565b34801561070b57600080fd5b503660011981013560f01c9003605401356103d9565b34801561072d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b34801561076057600080fd5b506107b661076f36600461548d565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b03166060820152608001610371565b34801561080057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b34801561083357600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610371565b34801561087457600080fd5b503660011981013560f01c9003601401356103d9565b34801561089657600080fd5b5061035c6108a536600461548d565b611d7a565b3480156108b657600080fd5b506103d96108c536600461552a565b611f14565b3480156108d657600080fd5b506108ea6108e536600461548d565b612115565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e001610371565b34801561094a57600080fd5b5060005461035c9067ffffffffffffffff1681565b34801561096b57600080fd5b506103d961097a3660046154be565b60036020526000908152604090205481565b34801561099857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b3480156109cb57600080fd5b5061032d6109da366004615553565b612189565b3480156109eb57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061035c565b348015610a1e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b348015610a5157600080fd5b506104d9610a6036600461548d565b60046020526000908152604090205460ff1681565b348015610a8157600080fd5b5061032d610a90366004615401565b612234565b348015610aa157600080fd5b50610aaa61261a565b604051610371939291906155df565b348015610ac557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b348015610af857600080fd5b506104d9610b0736600461548d565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610b3b57610b3b615391565b14610b595760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610b6e57610b6e615604565b906000526020600020906005020190506000610b8984611d7a565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015610bf2576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615610c3b576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805480158015610c5857508515155b15610cd957835464010000000090046001600160a01b031660008115610c7e5781610c8d565b60018601546001600160a01b03165b9050610c998187612677565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b03166060830152610d5d576001600160801b036040820152600181526000869003610d5d578195505b600086826020015163ffffffff16610d759190615662565b90506000838211610d865781610d88565b835b602084015190915063ffffffff165b81811015610ea8576000868281548110610db357610db3615604565b6000918252602080832090910154808352600690915260409091205490915060ff16610e0b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110610e2057610e20615604565b60009182526020909120600590910201805490915064010000000090046001600160a01b0316158015610e675750600481015460408701516001600160801b039182169116115b15610e935760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b50508080610ea09061567a565b915050610d97565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909316929092179091558490036110d557606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561101257506000547201000000000000000000000000000000000000900460ff165b1561106d576001546001600160a01b031661102d818a612677565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556110d3565b61109a6001600160a01b038216156110855781611094565b60018901546001600160a01b03165b89612677565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b60008054600160801b900460ff1660028111156110ff576110ff615391565b1461111d5760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615611170576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111893660011981013560f01c90036014013590565b90565b61119a6111958561571d565b612755565b146111d1576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e060808501856157e1565b8101906111ed9190615846565b5092505050808383604051611203929190615883565b604051809103902014611242576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061128b61128685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061279b92505050565b6127c8565b905060006112b2826008815181106112a5576112a5615604565b60200260200101516129cc565b90506020815111156112f0576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605401358103611347576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61135660608801356001615662565b811080611373575061137060408801356060890135615662565b81115b156113aa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff167201000000000000000000000000000000000000179055505050565b600080600054600160801b900460ff16600281111561143b5761143b615391565b146114595760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166114bd576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b031660026000815481106114dc576114dc615604565b600091825260209091206005909102015464010000000090046001600160a01b03161461150a57600161150d565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b8360028111156115b1576115b1615391565b0217905560028111156115c6576115c6615391565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2600181600281111561160357611603615391565b0361118657604080518082018252601581527f4661756c7450726f6f664c6f636b696e67506f6f6c0000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac1916116a09160040161547a565b602060405180830381865afa1580156116bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e19190615893565b90506001600160a01b0381161561180c576000600260008154811061170857611708615604565b60009182526020909120600590910201546040517fc96be4cb0000000000000000000000000000000000000000000000000000000081526401000000009091046001600160a01b0390811660048301819052925083169063c96be4cb90602401600060405180830381600087803b15801561178257600080fd5b505af1925050508015611793575060015b61180a573d8080156117c1576040519150601f19603f3d011682016040523d82523d6000602084013e6117c6565b606091505b50816001600160a01b03167f17ea47b379a2daf87a43d9fe6e50400125dff97424a6a7686eca528970fffc0f82604051611800919061547a565b60405180910390a2505b505b604080518082018252601481527f5374617465436f6d6d69746d656e74436861696e000000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac1916118a2919060040161547a565b602060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190615893565b6001600160a01b0316637fe9b70f61191d600260008154811061190857611908615604565b90600052602060002090600502016003015490565b6040518263ffffffff1660e01b815260040161193b91815260200190565b600060405180830381600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050505090565b6005602052816000526040600020818154811061198d57600080fd5b90600052602060002001600091509150505481565b905090565b6119b48383836001611c5a565b505050565b604080518082018252601481527f5374617465436f6d6d69746d656e74436861696e000000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac191611a519160040161547a565b602060405180830381865afa158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190615893565b60008181526007602090815260408083206005909252822080548254611ac390610100900463ffffffff16826158b0565b95945050505050565b60606119a260546020612a53565b6001600160a01b038116600090815260036020526040812080549082905590819003611b32576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c1a576040519150601f19603f3d011682016040523d82523d6000602084013e611c1f565b606091505b50509050806119b4576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611cb95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b611cef576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cfb84848484612a87565b50505050565b6119b48383836000611c5a565b326001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d70576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d7861341d565b565b600080600054600160801b900460ff166002811115611d9b57611d9b615391565b14611db95760405163067fe19560e41b815260040160405180910390fd5b600060028381548110611dce57611dce615604565b600091825260208220600590910201805490925063ffffffff90811614611e3457815460028054909163ffffffff16908110611e0c57611e0c615604565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b6004820154600090611e5f90600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b611e739067ffffffffffffffff16426158b0565b611e89611e52846001600160801b031660401c90565b67ffffffffffffffff16611e9d9190615662565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611eea5780611ac3565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b60006002600081548110611f2a57611f2a615604565b60009182526020909120600160059092020101546001600160a01b03163303611f5557506000919050565b6000611fd1836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115612030576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a300600061204b83836158f6565b9050670de0b6b3a76400006000612082827f000000000000000000000000000000000000000000000000000000000000000061590a565b905060006120a061209b670de0b6b3a76400008661590a565b613a59565b905060006120ae8484613cab565b905060006120bc8383613cfa565b905060006120c982613d28565b905060006120e8826120e3670de0b6b3a76400008f61590a565b613f10565b905060006120f68b83613cfa565b9050612102818d61590a565b9f9e505050505050505050505050505050565b6002818154811061212557600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121e85750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61221e576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61222c868686868686613f41565b505050505050565b60008054600160801b900460ff16600281111561225357612253615391565b146122715760405163067fe19560e41b815260040160405180910390fd5b6000806000806122808661449d565b93509350935093506000612296858585856147f6565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c9190615893565b9050600189036123e9576001600160a01b0381166352f0f3ad8a8461234d3660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e39190615929565b506110d5565b60028903612408576001600160a01b0381166352f0f3ad8a848961234d565b60038903612427576001600160a01b0381166352f0f3ad8a848761234d565b6004890361255c5760006124646001600160801b0385167f0000000000000000000000000000000000000000000000000000000000000000614895565b6009546124719190615662565b61247c906001615662565b90503660011981013560f01c90036054013581106124a9573660011981013560f01c9003605401356124ab565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125559190615929565b50506110d5565b600589036125e8576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a4016123a0565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000003660011981013560f01c9003601401356060612655611acc565b9050909192565b60008183101561266c578161266e565b825b90505b92915050565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b03909316928392906126b0908490615662565b90915550506040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b50505050505050565b6000816020015182604001518360600151846080015160405160200161277e9493929190615942565b604051602081830303815290604052805190602001209050919050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60606000806127d68461492a565b919350909150600190508160018111156127f2576127f2615391565b146128445760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064015b60405180910390fd5b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161285d5790505090506000835b86518110156129c157602082106129095760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e00000000000000000000000000000000000000000000606482015260840161283b565b6000806129466040518060400160405280858c6000015161292a91906158b0565b8152602001858c6020015161293f9190615662565b905261492a565b5091509150604051806040016040528083836129629190615662565b8152602001848b602001516129779190615662565b81525085858151811061298c5761298c615604565b60209081029190910101526129a2600185615662565b93506129ae8183615662565b6129b89084615662565b9250505061288a565b508152949350505050565b606060008060006129dc8561492a565b9194509250905060008160018111156129f7576129f7615391565b14612a445760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640161283b565b611ac385602001518484614c7b565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054600160801b900460ff166002811115612aa657612aa6615391565b14612ac45760405163067fe19560e41b815260040160405180910390fd5b600060028481548110612ad957612ad9615604565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514612b9d576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000612c32826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612c6d5750612c6a7f00000000000000000000000000000000000000000000000000000000000000006002615662565b81145b8015612c77575084155b15612cae576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612cd4575086155b15612d0b576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115612d65576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d907f00000000000000000000000000000000000000000000000000000000000000006001615662565b8103612da257612da286888588614d56565b34612dac83611f14565b14612de3576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612dee88611d7a565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603612e56576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e8360017f00000000000000000000000000000000000000000000000000000000000000006158b0565b8303612fa7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b9190615893565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190615929565b612fa0907f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16615967565b905061303a565b612fd260017f00000000000000000000000000000000000000000000000000000000000000006158b0565b830361300d57612fa07f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615993565b507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff165b61306e817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166159c3565b67ffffffffffffffff166130898367ffffffffffffffff1690565b67ffffffffffffffff1611156130d0576130cd817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166159c3565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff1615613145576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c8152602001908152602001600020600160028054905061333c91906158b0565b81546001810183556000928352602083200155604080517fd0e30db000000000000000000000000000000000000000000000000000000000815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561346f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082018252601481527f5374617465436f6d6d69746d656e74436861696e000000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac1916135079160040161547a565b602060405180830381865afa158015613524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135489190615893565b6040517fa0832c030000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015290915060009081906001600160a01b0384169063a0832c03906024016040805180830381865afa1580156135cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f091906159ec565b9092509050818061362d576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5fc993dd000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b03851690635fc993dd90602401602060405180830381865afa15801561368b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136af9190615a10565b156136e6576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528181526020018290526008819055600982905536607a1461371957639824bdab6000526004601cfd5b813660011981013560f01c90036054013511613772576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c900360140135600482015260240161283b565b6040805160e08101825263ffffffff808252600060208301818152600119369081013560f01c90038035606090811c868801908152346001600160801b0381811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805499516001600160a01b03908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad18501555195518216600160801b0295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b158015613a0657600080fd5b505af1158015613a1a573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550505050505050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613aaf57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613ce857637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613d185763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613d5657919050565b680755bf798b4a1bf1e58212613d745763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061266e670de0b6b3a764000083613f2886613a59565b613f329190615a2d565b613f3c9190615ae9565b613d28565b60008054600160801b900460ff166002811115613f6057613f60615391565b14613f7e5760405163067fe19560e41b815260040160405180910390fd5b600060028781548110613f9357613f93615604565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b9050613fe97f00000000000000000000000000000000000000000000000000000000000000006001615662565b614063826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461409d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915614179576140f07f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006158b0565b6001901b614106846001600160801b0316614edc565b6001600160801b03166141199190615b33565b1561414d5761414461413560016001600160801b038716615b47565b865463ffffffff166000614f62565b6003015461416f565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061419a565b600385015491506141976141356001600160801b0386166001615b67565b90505b600882901b60088a8a6040516141b1929190615883565b6040518091039020901b146141f2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141fd8c61502b565b9050600061420c836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e14ced3290614279908f908f908f908f908a90600401615bb4565b6020604051808303816000875af1158015614298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142bc9190615929565b600485015491149150600090600290614345906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143bf896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143c99190615bee565b6143d39190615c11565b60ff161590508115158103614414576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b03161561445e576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008060008060008590506000600282815481106144bd576144bd615604565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090614572906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145ac576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090614651906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146c657825463ffffffff166146907f00000000000000000000000000000000000000000000000000000000000000006001615662565b830361469a578391505b600281815481106146ad576146ad615604565b90600052602060002090600502019350809450506145b0565b600481810154908401546001600160801b0391821691166000816001600160801b031661470b6146ff856001600160801b031660011c90565b6001600160801b031690565b6001600160801b031614905080156147a4576000614731836001600160801b0316614edc565b6001600160801b0316111561478157600061476161475960016001600160801b038616615b47565b896001614f62565b6003810154600490910154909c506001600160801b03169a506147879050565b6008549a505b600386015460048701549099506001600160801b031697506147e8565b60006147bd6147596001600160801b0385166001615b67565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b038416156148515760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611ac3565b82826040516020016148769291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614909847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b6000806000808460000151116149825760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640161283b565b6020840151805160001a607f81116149a7576000600160009450945094505050614c74565b60b78111614a235760006149bc6080836158b0565b905080876000015111614a115760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640161283b565b60019550935060009250614c74915050565b60bf8111614b12576000614a3860b7836158b0565b905080876000015111614a8d5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640161283b565b600183015160208290036101000a9004614aa78183615662565b885111614af65760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640161283b565b614b01826001615662565b9650945060009350614c7492505050565b60f78111614b8d576000614b2760c0836158b0565b905080876000015111614b7c5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640161283b565b600195509350849250614c74915050565b6000614b9a60f7836158b0565b905080876000015111614bef5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640161283b565b600183015160208290036101000a9004614c098183615662565b885111614c585760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e00000000000000000000604482015260640161283b565b614c63826001615662565b9650945060019350614c7492505050565b9193909250565b606060008267ffffffffffffffff811115614c9857614c98615694565b6040519080825280601f01601f191660200182016040528015614cc2576020820181803683370190505b5090508051600003614cd5579050614d4f565b6000614ce18587615662565b90506020820160005b614cf56020876158f6565b811015614d2c5782518252614d0b602084615662565b9250614d18602083615662565b915080614d248161567a565b915050614cea565b5080519151601f86166020036101000a6000190192831692191691909117905290505b9392505050565b6000614d6c6001600160801b0384166001615b67565b90506000614d7c82866001614f62565b9050600086901a8380614e465750614db560027f0000000000000000000000000000000000000000000000000000000000000000615b33565b6004830154600290614e37906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614e419190615c11565b60ff16145b15614e9e5760ff811660011480614e60575060ff81166002145b614e99576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161283b565b61274c565b60ff81161561274c576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161283b565b600080614f50837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b60008082614fa257614f9d6001600160801b0386167f000000000000000000000000000000000000000000000000000000000000000061505a565b614fb4565b614fb4856001600160801b0316615199565b905060028481548110614fc957614fc9615604565b906000526020600020906005020191505b60048201546001600160801b0382811691161461502357815460028054909163ffffffff1690811061500e5761500e615604565b90600052602060002090600502019150614fda565b509392505050565b600080600080600061503c8661449d565b9350935093509350615050848484846147f6565b9695505050505050565b6000816150d7846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150ed5763b34b5c226000526004601cfd5b6150f683615199565b905081615173826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116126715761266e615189836001615662565b6001600160801b03831690615225565b60008119600183011681615214827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615299847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b600080604083850312156152c857600080fd5b50508035926020909101359150565b60008083601f8401126152e957600080fd5b50813567ffffffffffffffff81111561530157600080fd5b60208301915083602082850101111561531957600080fd5b9250929050565b60008060006040848603121561533557600080fd5b833567ffffffffffffffff8082111561534d57600080fd5b9085019060a0828803121561536157600080fd5b9093506020850135908082111561537757600080fd5b50615384868287016152d7565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106153fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561541657600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561545357602081850181015186830182015201615437565b81811115615465576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061266e602083018461542d565b60006020828403121561549f57600080fd5b5035919050565b6001600160a01b03811681146154bb57600080fd5b50565b6000602082840312156154d057600080fd5b8135614d4f816154a6565b80151581146154bb57600080fd5b600080600080608085870312156154ff57600080fd5b843593506020850135925060408501359150606085013561551f816154db565b939692955090935050565b60006020828403121561553c57600080fd5b81356001600160801b0381168114614d4f57600080fd5b6000806000806000806080878903121561556c57600080fd5b86359550602087013561557e816154db565b9450604087013567ffffffffffffffff8082111561559b57600080fd5b6155a78a838b016152d7565b909650945060608901359150808211156155c057600080fd5b506155cd89828a016152d7565b979a9699509497509295939492505050565b63ffffffff84168152826020820152606060408201526000611ac3606083018461542d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561567557615675615633565b500190565b6000600019820361568d5761568d615633565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156156e6576156e6615694565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561571557615715615694565b604052919050565b600060a0823603121561572f57600080fd5b6157376156c3565b82358152602080840135818301526040840135604083015260608401356060830152608084013567ffffffffffffffff8082111561577457600080fd5b9085019036601f83011261578757600080fd5b81358181111561579957615799615694565b6157ab84601f19601f840116016156ec565b915080825236848285010111156157c157600080fd5b808484018584013760009082019093019290925250608082015292915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261581657600080fd5b83018035915067ffffffffffffffff82111561583157600080fd5b60200191503681900382131561531957600080fd5b6000806000806080858703121561585c57600080fd5b84359350602085013561586e816154a6565b93969395505050506040820135916060013590565b8183823760009101908152919050565b6000602082840312156158a557600080fd5b8151614d4f816154a6565b6000828210156158c2576158c2615633565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615905576159056158c7565b500490565b600081600019048311821515161561592457615924615633565b500290565b60006020828403121561593b57600080fd5b5051919050565b848152836020820152826040820152608060608201526000615050608083018461542d565b600067ffffffffffffffff80831681851680830382111561598a5761598a615633565b01949350505050565b600067ffffffffffffffff808316818516818304811182151516156159ba576159ba615633565b02949350505050565b600067ffffffffffffffff838116908316818110156159e4576159e4615633565b039392505050565b600080604083850312156159ff57600080fd5b505080516020909101519092909150565b600060208284031215615a2257600080fd5b8151614d4f816154db565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a6e57615a6e615633565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615aa957615aa9615633565b60008712925087820587128484161615615ac557615ac5615633565b87850587128184161615615adb57615adb615633565b505050929093029392505050565b600082615af857615af86158c7565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615b2e57615b2e615633565b500590565b600082615b4257615b426158c7565b500690565b60006001600160801b03838116908316818110156159e4576159e4615633565b60006001600160801b0380831681851680830382111561598a5761598a615633565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b606081526000615bc8606083018789615b89565b8281036020840152615bdb818688615b89565b9150508260408301529695505050505050565b600060ff821660ff841680821015615c0857615c08615633565b90039392505050565b600060ff831680615c2457615c246158c7565b8060ff8416069150509291505056fea2646970667358221220469d4d84c36f6f4b89d65069732a132e1ac6f65f6476d4adfcda6b72a7aa6c4764736f6c634300080f0033",
  "deployedBytecode": "0x6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610a95578063fa315aa914610ab9578063fe2bbeb214610aec57600080fd5b8063ec5e630814610a12578063eff0f59214610a45578063f8f43ff614610a7557600080fd5b8063d6ae3cd5116100bb578063d6ae3cd51461098c578063d8cc1a3c146109bf578063dabd396d146109df57600080fd5b8063c6f0308c146108ca578063cf09e0d01461093e578063d5d44d801461095f57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610868578063bd8da9561461088a578063c395e1ca146108aa57600080fd5b8063a445ece614610754578063a8e4fb90146107f4578063bbdc02db1461082757600080fd5b80638980e0cc116101745780638980e0cc146106ea5780638b85902b146106ff5780638d450a951461072157600080fd5b806370872aa5146106ba5780637b0f0adc146106cf5780638129fc1c146106e257600080fd5b80633fc8cef31161025e5780635a5fa2d9116102075780636361506d116101e15780636361506d146106525780636b6716c0146106745780636f034409146106a757600080fd5b80635a5fa2d9146105fd578063609d33341461061d57806360e274641461063257600080fd5b8063543acd5011610238578063543acd501461056257806354fd4d501461057757806357da950e146105cd57600080fd5b80633fc8cef3146104e9578063472777c61461051c578063534db0e21461052f57600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b229146104545780633a768463146104765780633e3ac912146104a957600080fd5b80632810e1d6146103e75780632ad69aeb146103fc57806330dbe5701461041c57600080fd5b80631e31db5a116102f15780631e31db5a1461037a578063200d2ed21461039a57806325fc2ace146103c857600080fd5b806303c2924d1461030d57806319effeb41461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046152b5565b610b1c565b005b34801561033b57600080fd5b5060005461035c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561038657600080fd5b5061032d610395366004615320565b6110e0565b3480156103a657600080fd5b506000546103bb90600160801b900460ff1681565b60405161037191906153c0565b3480156103d457600080fd5b506008545b604051908152602001610371565b3480156103f357600080fd5b506103bb61141a565b34801561040857600080fd5b506103d96104173660046152b5565b611971565b34801561042857600080fd5b5060015461043c906001600160a01b031681565b6040516001600160a01b039091168152602001610371565b34801561046057600080fd5b503660011981013560f01c90033560601c61043c565b34801561048257600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b3480156104b557600080fd5b506000546104d9907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610371565b3480156104f557600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b61032d61052a366004615401565b6119a7565b34801561053b57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b34801561056e57600080fd5b5061043c6119b9565b34801561058357600080fd5b506105c06040518060400160405280600a81526020017f312e332e302d72632e310000000000000000000000000000000000000000000081525081565b604051610371919061547a565b3480156105d957600080fd5b506008546009546105e8919082565b60408051928352602083019190915201610371565b34801561060957600080fd5b506103d961061836600461548d565b611a92565b34801561062957600080fd5b506105c0611acc565b34801561063e57600080fd5b5061032d61064d3660046154be565b611ada565b34801561065e57600080fd5b503660011981013560f01c9003603401356103d9565b34801561068057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061035c565b61032d6106b53660046154e9565b611c5a565b3480156106c657600080fd5b506009546103d9565b61032d6106dd366004615401565b611d01565b61032d611d0e565b3480156106f657600080fd5b506002546103d9565b34801561070b57600080fd5b503660011981013560f01c9003605401356103d9565b34801561072d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b34801561076057600080fd5b506107b661076f36600461548d565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046001600160801b0316906001600160a01b031684565b60408051941515855263ffffffff90931660208501526001600160801b03909116918301919091526001600160a01b03166060820152608001610371565b34801561080057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061043c565b34801561083357600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610371565b34801561087457600080fd5b503660011981013560f01c9003601401356103d9565b34801561089657600080fd5b5061035c6108a536600461548d565b611d7a565b3480156108b657600080fd5b506103d96108c536600461552a565b611f14565b3480156108d657600080fd5b506108ea6108e536600461548d565b612115565b6040805163ffffffff90981688526001600160a01b03968716602089015295909416948601949094526001600160801b039182166060860152608085015291821660a08401521660c082015260e001610371565b34801561094a57600080fd5b5060005461035c9067ffffffffffffffff1681565b34801561096b57600080fd5b506103d961097a3660046154be565b60036020526000908152604090205481565b34801561099857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b3480156109cb57600080fd5b5061032d6109da366004615553565b612189565b3480156109eb57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061035c565b348015610a1e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b348015610a5157600080fd5b506104d9610a6036600461548d565b60046020526000908152604090205460ff1681565b348015610a8157600080fd5b5061032d610a90366004615401565b612234565b348015610aa157600080fd5b50610aaa61261a565b604051610371939291906155df565b348015610ac557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d9565b348015610af857600080fd5b506104d9610b0736600461548d565b60066020526000908152604090205460ff1681565b60008054600160801b900460ff166002811115610b3b57610b3b615391565b14610b595760405163067fe19560e41b815260040160405180910390fd5b600060028381548110610b6e57610b6e615604565b906000526020600020906005020190506000610b8984611d7a565b905067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169082161015610bf2576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615610c3b576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600560205260409020805480158015610c5857508515155b15610cd957835464010000000090046001600160a01b031660008115610c7e5781610c8d565b60018601546001600160a01b03165b9050610c998187612677565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046001600160801b031693810193909352600101546001600160a01b03166060830152610d5d576001600160801b036040820152600181526000869003610d5d578195505b600086826020015163ffffffff16610d759190615662565b90506000838211610d865781610d88565b835b602084015190915063ffffffff165b81811015610ea8576000868281548110610db357610db3615604565b6000918252602080832090910154808352600690915260409091205490915060ff16610e0b576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028281548110610e2057610e20615604565b60009182526020909120600590910201805490915064010000000090046001600160a01b0316158015610e675750600481015460408701516001600160801b039182169116115b15610e935760018101546001600160a01b0316606087015260048101546001600160801b031660408701525b50508080610ea09061567a565b915050610d97565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006001600160801b03909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909316929092179091558490036110d557606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561101257506000547201000000000000000000000000000000000000900460ff165b1561106d576001546001600160a01b031661102d818a612677565b88546001600160a01b03909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556110d3565b61109a6001600160a01b038216156110855781611094565b60018901546001600160a01b03165b89612677565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038316021788555b505b505050505050505050565b60008054600160801b900460ff1660028111156110ff576110ff615391565b1461111d5760405163067fe19560e41b815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615611170576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111893660011981013560f01c90036014013590565b90565b61119a6111958561571d565b612755565b146111d1576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e060808501856157e1565b8101906111ed9190615846565b5092505050808383604051611203929190615883565b604051809103902014611242576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061128b61128685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061279b92505050565b6127c8565b905060006112b2826008815181106112a5576112a5615604565b60200260200101516129cc565b90506020815111156112f0576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c3660011981013560f01c9003605401358103611347576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61135660608801356001615662565b811080611373575061137060408801356060890135615662565b81115b156113aa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff167201000000000000000000000000000000000000179055505050565b600080600054600160801b900460ff16600281111561143b5761143b615391565b146114595760405163067fe19560e41b815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166114bd576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006001600160a01b031660026000815481106114dc576114dc615604565b600091825260209091206005909102015464010000000090046001600160a01b03161461150a57600161150d565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff90911617600160801b8360028111156115b1576115b1615391565b0217905560028111156115c6576115c6615391565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2600181600281111561160357611603615391565b0361118657604080518082018252601581527f4661756c7450726f6f664c6f636b696e67506f6f6c0000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac1916116a09160040161547a565b602060405180830381865afa1580156116bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e19190615893565b90506001600160a01b0381161561180c576000600260008154811061170857611708615604565b60009182526020909120600590910201546040517fc96be4cb0000000000000000000000000000000000000000000000000000000081526401000000009091046001600160a01b0390811660048301819052925083169063c96be4cb90602401600060405180830381600087803b15801561178257600080fd5b505af1925050508015611793575060015b61180a573d8080156117c1576040519150601f19603f3d011682016040523d82523d6000602084013e6117c6565b606091505b50816001600160a01b03167f17ea47b379a2daf87a43d9fe6e50400125dff97424a6a7686eca528970fffc0f82604051611800919061547a565b60405180910390a2505b505b604080518082018252601481527f5374617465436f6d6d69746d656e74436861696e000000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac1916118a2919060040161547a565b602060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190615893565b6001600160a01b0316637fe9b70f61191d600260008154811061190857611908615604565b90600052602060002090600502016003015490565b6040518263ffffffff1660e01b815260040161193b91815260200190565b600060405180830381600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050505090565b6005602052816000526040600020818154811061198d57600080fd5b90600052602060002001600091509150505481565b905090565b6119b48383836001611c5a565b505050565b604080518082018252601481527f5374617465436f6d6d69746d656e74436861696e000000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac191611a519160040161547a565b602060405180830381865afa158015611a6e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190615893565b60008181526007602090815260408083206005909252822080548254611ac390610100900463ffffffff16826158b0565b95945050505050565b60606119a260546020612a53565b6001600160a01b038116600090815260036020526040812080549082905590819003611b32576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b505050506000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611c1a576040519150601f19603f3d011682016040523d82523d6000602084013e611c1f565b606091505b50509050806119b4576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611cb95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b611cef576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cfb84848484612a87565b50505050565b6119b48383836000611c5a565b326001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d70576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d7861341d565b565b600080600054600160801b900460ff166002811115611d9b57611d9b615391565b14611db95760405163067fe19560e41b815260040160405180910390fd5b600060028381548110611dce57611dce615604565b600091825260208220600590910201805490925063ffffffff90811614611e3457815460028054909163ffffffff16908110611e0c57611e0c615604565b906000526020600020906005020160040160109054906101000a90046001600160801b031690505b6004820154600090611e5f90600160801b900467ffffffffffffffff165b67ffffffffffffffff1690565b611e739067ffffffffffffffff16426158b0565b611e89611e52846001600160801b031660401c90565b67ffffffffffffffff16611e9d9190615662565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff168167ffffffffffffffff1611611eea5780611ac3565b7f000000000000000000000000000000000000000000000000000000000000000095945050505050565b60006002600081548110611f2a57611f2a615604565b60009182526020909120600160059092020101546001600160a01b03163303611f5557506000919050565b6000611fd1836001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000000811115612030576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a300600061204b83836158f6565b9050670de0b6b3a76400006000612082827f000000000000000000000000000000000000000000000000000000000000000061590a565b905060006120a061209b670de0b6b3a76400008661590a565b613a59565b905060006120ae8484613cab565b905060006120bc8383613cfa565b905060006120c982613d28565b905060006120e8826120e3670de0b6b3a76400008f61590a565b613f10565b905060006120f68b83613cfa565b9050612102818d61590a565b9f9e505050505050505050505050505050565b6002818154811061212557600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff841695506401000000009093046001600160a01b03908116949216926001600160801b03918216929180821691600160801b90041687565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806121e85750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61221e576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61222c868686868686613f41565b505050505050565b60008054600160801b900460ff16600281111561225357612253615391565b146122715760405163067fe19560e41b815260040160405180910390fd5b6000806000806122808661449d565b93509350935093506000612296858585856147f6565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231c9190615893565b9050600189036123e9576001600160a01b0381166352f0f3ad8a8461234d3660011981013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e39190615929565b506110d5565b60028903612408576001600160a01b0381166352f0f3ad8a848961234d565b60038903612427576001600160a01b0381166352f0f3ad8a848761234d565b6004890361255c5760006124646001600160801b0385167f0000000000000000000000000000000000000000000000000000000000000000614895565b6009546124719190615662565b61247c906001615662565b90503660011981013560f01c90036054013581106124a9573660011981013560f01c9003605401356124ab565b805b90506001600160a01b0382166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af1158015612531573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125559190615929565b50506110d5565b600589036125e8576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000000060c01b604482015260086064820152608481018890526001600160a01b038216906352f0f3ad9060a4016123a0565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000003660011981013560f01c9003601401356060612655611acc565b9050909192565b60008183101561266c578161266e565b825b90505b92915050565b60028101546001600160a01b038316600090815260036020526040812080546001600160801b03909316928392906126b0908490615662565b90915550506040517f7eee288d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b50505050505050565b6000816020015182604001518360600151846080015160405160200161277e9493929190615942565b604051602081830303815290604052805190602001209050919050565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60606000806127d68461492a565b919350909150600190508160018111156127f2576127f2615391565b146128445760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064015b60405180910390fd5b6040805160208082526104208201909252600091816020015b604080518082019091526000808252602082015281526020019060019003908161285d5790505090506000835b86518110156129c157602082106129095760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e00000000000000000000000000000000000000000000606482015260840161283b565b6000806129466040518060400160405280858c6000015161292a91906158b0565b8152602001858c6020015161293f9190615662565b905261492a565b5091509150604051806040016040528083836129629190615662565b8152602001848b602001516129779190615662565b81525085858151811061298c5761298c615604565b60209081029190910101526129a2600185615662565b93506129ae8183615662565b6129b89084615662565b9250505061288a565b508152949350505050565b606060008060006129dc8561492a565b9194509250905060008160018111156129f7576129f7615391565b14612a445760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640161283b565b611ac385602001518484614c7b565b6040518181523660011981013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054600160801b900460ff166002811115612aa657612aa6615391565b14612ac45760405163067fe19560e41b815260040160405180910390fd5b600060028481548110612ad957612ad9615604565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff811684526001600160a01b0364010000000090910481169484019490945260018101549093169082015260028201546001600160801b03908116606083015260038301546080830181905260049093015480821660a0840152600160801b90041660c082015291508514612b9d576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156001600160801b0383161760011b90506000612c32826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612c6d5750612c6a7f00000000000000000000000000000000000000000000000000000000000000006002615662565b81145b8015612c77575084155b15612cae576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612cd4575086155b15612d0b576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115612d65576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d907f00000000000000000000000000000000000000000000000000000000000000006001615662565b8103612da257612da286888588614d56565b34612dac83611f14565b14612de3576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612dee88611d7a565b905067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811690821603612e56576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e8360017f00000000000000000000000000000000000000000000000000000000000000006158b0565b8303612fa7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b9190615893565b6001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6c9190615929565b612fa0907f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16615967565b905061303a565b612fd260017f00000000000000000000000000000000000000000000000000000000000000006158b0565b830361300d57612fa07f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615993565b507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff165b61306e817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166159c3565b67ffffffffffffffff166130898367ffffffffffffffff1690565b67ffffffffffffffff1611156130d0576130cd817f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166159c3565b91505b6000604083901b421760008a8152608087901b6001600160801b038d1617602052604081209192509060008181526004602052604090205490915060ff1615613145576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808d63ffffffff16815260200160006001600160a01b03168152602001336001600160a01b03168152602001346001600160801b031681526020018c8152602001886001600160801b03168152602001846001600160801b0316815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160006101000a8154816001600160801b0302191690836001600160801b031602179055506080820151816003015560a08201518160040160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055505050600560008c8152602001908152602001600020600160028054905061333c91906158b0565b81546001810183556000928352602083200155604080517fd0e30db000000000000000000000000000000000000000000000000000000000815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b50506040513393508d92508e91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a4505050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561346f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082018252601481527f5374617465436f6d6d69746d656e74436861696e000000000000000000000000602082015290517fbf40fac10000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163bf40fac1916135079160040161547a565b602060405180830381865afa158015613524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135489190615893565b6040517fa0832c030000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015290915060009081906001600160a01b0384169063a0832c03906024016040805180830381865afa1580156135cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f091906159ec565b9092509050818061362d576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5fc993dd000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b03851690635fc993dd90602401602060405180830381865afa15801561368b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136af9190615a10565b156136e6576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528181526020018290526008819055600982905536607a1461371957639824bdab6000526004601cfd5b813660011981013560f01c90036054013511613772576040517ff40239db0000000000000000000000000000000000000000000000000000000081523660011981013560f01c900360140135600482015260240161283b565b6040805160e08101825263ffffffff808252600060208301818152600119369081013560f01c90038035606090811c868801908152346001600160801b0381811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace8101805499516001600160a01b03908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad18501555195518216600160801b0295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f00000000000000000000000000000000000000000000000000000000000000009092169363d0e30db093926004828101939282900301818588803b158015613a0657600080fd5b505af1158015613a1a573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550505050505050565b6001600160801b03811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613aaf57631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613ce857637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613d185763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613d5657919050565b680755bf798b4a1bf1e58212613d745763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b600061266e670de0b6b3a764000083613f2886613a59565b613f329190615a2d565b613f3c9190615ae9565b613d28565b60008054600160801b900460ff166002811115613f6057613f60615391565b14613f7e5760405163067fe19560e41b815260040160405180910390fd5b600060028781548110613f9357613f93615604565b6000918252602082206005919091020160048101549092506001600160801b0316908715821760011b9050613fe97f00000000000000000000000000000000000000000000000000000000000000006001615662565b614063826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161461409d576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915614179576140f07f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006158b0565b6001901b614106846001600160801b0316614edc565b6001600160801b03166141199190615b33565b1561414d5761414461413560016001600160801b038716615b47565b865463ffffffff166000614f62565b6003015461416f565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061419a565b600385015491506141976141356001600160801b0386166001615b67565b90505b600882901b60088a8a6040516141b1929190615883565b6040518091039020901b146141f2576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141fd8c61502b565b9050600061420c836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e14ced3290614279908f908f908f908f908a90600401615bb4565b6020604051808303816000875af1158015614298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142bc9190615929565b600485015491149150600090600290614345906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143bf896001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6143c99190615bee565b6143d39190615c11565b60ff161590508115158103614414576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b875464010000000090046001600160a01b03161561445e576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008060008060008590506000600282815481106144bd576144bd615604565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000090614572906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145ac576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000090614651906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146c657825463ffffffff166146907f00000000000000000000000000000000000000000000000000000000000000006001615662565b830361469a578391505b600281815481106146ad576146ad615604565b90600052602060002090600502019350809450506145b0565b600481810154908401546001600160801b0391821691166000816001600160801b031661470b6146ff856001600160801b031660011c90565b6001600160801b031690565b6001600160801b031614905080156147a4576000614731836001600160801b0316614edc565b6001600160801b0316111561478157600061476161475960016001600160801b038616615b47565b896001614f62565b6003810154600490910154909c506001600160801b03169a506147879050565b6008549a505b600386015460048701549099506001600160801b031697506147e8565b60006147bd6147596001600160801b0385166001615b67565b6003808901546004808b015492840154930154909e506001600160801b039182169d50919b50169850505b505050505050509193509193565b60006001600160801b038416156148515760408051602081018790526001600160801b038087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611ac3565b82826040516020016148769291909182526001600160801b0316602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614909847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b6000806000808460000151116149825760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640161283b565b6020840151805160001a607f81116149a7576000600160009450945094505050614c74565b60b78111614a235760006149bc6080836158b0565b905080876000015111614a115760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640161283b565b60019550935060009250614c74915050565b60bf8111614b12576000614a3860b7836158b0565b905080876000015111614a8d5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640161283b565b600183015160208290036101000a9004614aa78183615662565b885111614af65760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640161283b565b614b01826001615662565b9650945060009350614c7492505050565b60f78111614b8d576000614b2760c0836158b0565b905080876000015111614b7c5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640161283b565b600195509350849250614c74915050565b6000614b9a60f7836158b0565b905080876000015111614bef5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640161283b565b600183015160208290036101000a9004614c098183615662565b885111614c585760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e00000000000000000000604482015260640161283b565b614c63826001615662565b9650945060019350614c7492505050565b9193909250565b606060008267ffffffffffffffff811115614c9857614c98615694565b6040519080825280601f01601f191660200182016040528015614cc2576020820181803683370190505b5090508051600003614cd5579050614d4f565b6000614ce18587615662565b90506020820160005b614cf56020876158f6565b811015614d2c5782518252614d0b602084615662565b9250614d18602083615662565b915080614d248161567a565b915050614cea565b5080519151601f86166020036101000a6000190192831692191691909117905290505b9392505050565b6000614d6c6001600160801b0384166001615b67565b90506000614d7c82866001614f62565b9050600086901a8380614e465750614db560027f0000000000000000000000000000000000000000000000000000000000000000615b33565b6004830154600290614e37906001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614e419190615c11565b60ff16145b15614e9e5760ff811660011480614e60575060ff81166002145b614e99576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161283b565b61274c565b60ff81161561274c576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161283b565b600080614f50837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b60008082614fa257614f9d6001600160801b0386167f000000000000000000000000000000000000000000000000000000000000000061505a565b614fb4565b614fb4856001600160801b0316615199565b905060028481548110614fc957614fc9615604565b906000526020600020906005020191505b60048201546001600160801b0382811691161461502357815460028054909163ffffffff1690811061500e5761500e615604565b90600052602060002090600502019150614fda565b509392505050565b600080600080600061503c8661449d565b9350935093509350615050848484846147f6565b9695505050505050565b6000816150d7846001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150ed5763b34b5c226000526004601cfd5b6150f683615199565b905081615173826001600160801b03167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116126715761266e615189836001615662565b6001600160801b03831690615225565b60008119600183011681615214827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615299847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f6307c4acdd60e01b67ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b600080604083850312156152c857600080fd5b50508035926020909101359150565b60008083601f8401126152e957600080fd5b50813567ffffffffffffffff81111561530157600080fd5b60208301915083602082850101111561531957600080fd5b9250929050565b60008060006040848603121561533557600080fd5b833567ffffffffffffffff8082111561534d57600080fd5b9085019060a0828803121561536157600080fd5b9093506020850135908082111561537757600080fd5b50615384868287016152d7565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600383106153fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561541657600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561545357602081850181015186830182015201615437565b81811115615465576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061266e602083018461542d565b60006020828403121561549f57600080fd5b5035919050565b6001600160a01b03811681146154bb57600080fd5b50565b6000602082840312156154d057600080fd5b8135614d4f816154a6565b80151581146154bb57600080fd5b600080600080608085870312156154ff57600080fd5b843593506020850135925060408501359150606085013561551f816154db565b939692955090935050565b60006020828403121561553c57600080fd5b81356001600160801b0381168114614d4f57600080fd5b6000806000806000806080878903121561556c57600080fd5b86359550602087013561557e816154db565b9450604087013567ffffffffffffffff8082111561559b57600080fd5b6155a78a838b016152d7565b909650945060608901359150808211156155c057600080fd5b506155cd89828a016152d7565b979a9699509497509295939492505050565b63ffffffff84168152826020820152606060408201526000611ac3606083018461542d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561567557615675615633565b500190565b6000600019820361568d5761568d615633565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156156e6576156e6615694565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561571557615715615694565b604052919050565b600060a0823603121561572f57600080fd5b6157376156c3565b82358152602080840135818301526040840135604083015260608401356060830152608084013567ffffffffffffffff8082111561577457600080fd5b9085019036601f83011261578757600080fd5b81358181111561579957615799615694565b6157ab84601f19601f840116016156ec565b915080825236848285010111156157c157600080fd5b808484018584013760009082019093019290925250608082015292915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261581657600080fd5b83018035915067ffffffffffffffff82111561583157600080fd5b60200191503681900382131561531957600080fd5b6000806000806080858703121561585c57600080fd5b84359350602085013561586e816154a6565b93969395505050506040820135916060013590565b8183823760009101908152919050565b6000602082840312156158a557600080fd5b8151614d4f816154a6565b6000828210156158c2576158c2615633565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615905576159056158c7565b500490565b600081600019048311821515161561592457615924615633565b500290565b60006020828403121561593b57600080fd5b5051919050565b848152836020820152826040820152608060608201526000615050608083018461542d565b600067ffffffffffffffff80831681851680830382111561598a5761598a615633565b01949350505050565b600067ffffffffffffffff808316818516818304811182151516156159ba576159ba615633565b02949350505050565b600067ffffffffffffffff838116908316818110156159e4576159e4615633565b039392505050565b600080604083850312156159ff57600080fd5b505080516020909101519092909150565b600060208284031215615a2257600080fd5b8151614d4f816154db565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a6e57615a6e615633565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615aa957615aa9615633565b60008712925087820587128484161615615ac557615ac5615633565b87850587128184161615615adb57615adb615633565b505050929093029392505050565b600082615af857615af86158c7565b60001983147f800000000000000000000000000000000000000000000000000000000000000083141615615b2e57615b2e615633565b500590565b600082615b4257615b426158c7565b500690565b60006001600160801b03838116908316818110156159e4576159e4615633565b60006001600160801b0380831681851680830382111561598a5761598a615633565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b606081526000615bc8606083018789615b89565b8281036020840152615bdb818688615b89565b9150508260408301529695505050505050565b600060ff821660ff841680821015615c0857615c08615633565b90039392505050565b600060ff831680615c2457615c246158c7565b8060ff8416069150509291505056fea2646970667358221220469d4d84c36f6f4b89d65069732a132e1ac6f65f6476d4adfcda6b72a7aa6c4764736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
