{
  "_format": "hh-sol-artifact-1",
  "contractName": "PermitHandler",
  "sourceName": "contracts/V3/handler/PermitHandler.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "claimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "claimer",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "io",
              "type": "uint8"
            },
            {
              "internalType": "uint16",
              "name": "round",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "tokenSlotIndex",
              "type": "uint8"
            }
          ],
          "internalType": "struct IHandler.Claim",
          "name": "claim",
          "type": "tuple"
        }
      ],
      "name": "getClaimIOAddressBranchToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string[]",
          "name": "areaNameList",
          "type": "string[]"
        }
      ],
      "name": "getEngineAreaList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIOBranches",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8[]",
              "name": "inBranch",
              "type": "uint8[]"
            },
            {
              "internalType": "uint8[]",
              "name": "outBranch",
              "type": "uint8[]"
            }
          ],
          "internalType": "struct IHandler.IOBranch[]",
          "name": "branches",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getInputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getOutputAddressRound",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getRuleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "engine",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "clusterArea",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "clusterId",
              "type": "uint32"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexInput",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "ruleSlotIndexOutput",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "branch",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "taskId",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "cmd",
              "type": "uint8"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.StateParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterArea",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "stateCounter",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "taskId",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "round",
          "type": "uint16"
        }
      ],
      "name": "getTokenBranch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256[]",
              "name": "valueList",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct TokenHandler.TokenBranch",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_signer",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "caller",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stateCounter",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "poolFee",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "caller",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "clusterArea",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "lastHandler",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "valueTime",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint32",
                  "name": "taskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "parentTaskId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "clusterId",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "components": [
                    {
                      "internalType": "uint8",
                      "name": "erc",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint32",
                          "name": "attrId",
                          "type": "uint32"
                        },
                        {
                          "internalType": "int40",
                          "name": "attrAmount",
                          "type": "int40"
                        }
                      ],
                      "internalType": "struct Attribute.AttributeIn[]",
                      "name": "attrInList",
                      "type": "tuple[]"
                    }
                  ],
                  "internalType": "struct Token.Token[]",
                  "name": "inTokenList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "bytes",
                  "name": "args",
                  "type": "bytes"
                }
              ],
              "internalType": "struct Task.Task",
              "name": "task",
              "type": "tuple"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            }
          ],
          "internalType": "struct Handler.Process",
          "name": "param",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "preResult",
          "type": "tuple"
        }
      ],
      "name": "process",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "handler",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "code",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "msg",
              "type": "string"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            }
          ],
          "internalType": "struct Handler.Result",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "regRule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "regRuleGroupSlotArgs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleConfig",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlotArgs",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "ruleGroupSlotSigner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "engineAreaList",
          "type": "address[]"
        }
      ],
      "name": "setEngineAreaList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "signer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "cmd",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "updateArgs",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50613a7d806100206000396000f3fe608060405234801561001057600080fd5b506004361061012d5760003560e01c80635790c294116100b35780635790c2941461028b57806362329cc5146102a05780636dabaf04146102b357806395edcb08146102cd578063a903620c146102ed578063af84b51f146102ff578063b41bd7891461031f578063b4b7035214610330578063c4d66de814610343578063d0d35b5514610356578063f2fe4fa514610369578063f96f58271461037857600080fd5b80631cc4f041146101325780631eda6e4f1461015a578063238ac9331461017a57806328334714146101a557806330adf81f146101ce57806334c76b25146102035780633644e51514610235578063394a73981461023e5780634b2dbcb8146102515780634b2e9b411461027157806354fd4d5014610284575b600080fd5b610145610140366004612259565b6103b9565b60405190151581526020015b60405180910390f35b61016d610168366004612390565b610499565b6040516101519190612441565b60045461018d906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61018d6101b3366004612491565b6007602052600090815260409020546001600160a01b031681565b6101f57ff0068b55d48516e90ff15efedf75d8cf4527ef16af13fa3e14f546f4a19330a681565b604051908152602001610151565b60408051808201909152600d81526c2832b936b4ba2430b7323632b960991b60208201525b60405161015191906124f7565b6101f560025481565b61022861024c366004612491565b61052f565b61026461025f36600461250a565b6105c9565b604051610151919061257e565b61026461027f36600461250a565b61066b565b60016101f5565b61029e6102993660046125cb565b61070b565b005b6102646102ae36600461265c565b61079b565b6101456102c1366004612711565b60019695505050505050565b6102e06102db3660046129d2565b6107e9565b6040516101519190612b9c565b61029e6102fb3660046132f1565b5050565b61031261030d3660046134a4565b610af0565b60405161015191906135c1565b61029e61032d366004613623565b50565b61014561033e366004612259565b610c30565b61029e610351366004613657565b610d98565b610228610364366004613672565b610f4a565b606060405161015191906136f3565b6103a1610386366004612491565b6005602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610151565b6000806103e7836000015184602001518560600151866040015187608001518860a001518960e00151611026565b60008181526008602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561044657602002820191906000526020600020905b815481526020019060010190808311610432575b505050505081525050905060008060ff168560c0015160ff16141561047d57610120850151610476908390611095565b9050610491565b61012085015161048e908390611128565b90505b949350505050565b60408051602081019091526060815260006104b98a898989898e89611026565b600081815260086020908152604091829020825181548084028201850185529281018381529495509390928492849184018282801561051757602002820191906000526020600020905b815481526020019060010190808311610503575b50505050508152505091505098975050505050505050565b6006602052600090815260409020805461054890613778565b80601f016020809104026020016040519081016040528092919081815260200182805461057490613778565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b505050505081565b606060008787878787876040516020016105e8969594939291906137ad565b60408051601f1981840301815282825280516020918201206000818152600a8352839020805480840286018401909452838552909450919083018282801561065957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161063b575b50505050509150509695505050505050565b6060600087878787878760405160200161068a969594939291906137ad565b60408051601f1981840301815282825280516020918201206000818152600983528390208054808402860184019094528385529094509190830182828015610659576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161063b5750505050509150509695505050505050565b60003385858560405160200161072494939291906137f0565b60408051601f19818403018152918152815160209283012060008181526006845291909120845191935061075d92909190850190612016565b5061076982600061119f565b60009182526007602052604090912080546001600160a01b0319166001600160a01b0390921691909117905550505050565b6060600082516001600160401b038111156107b8576107b86120c9565b6040519080825280602002602001820160405280156107e1578160200160208202803683370190505b509392505050565b60408051608081018252600080825260208201526060918101829052818101919091526108146111fc565b308252608083015160ff1661082857610ae7565b608083015160ff1660011415610ae75760006108478460600151611212565b9050600061086d610868836000886060015161121e9092919063ffffffff16565b61126b565b9050600061088e610868846001896060015161121e9092919063ffffffff16565b60608701519091506000906108a9906108689086600261121e565b905060006108ca6108688660038b6060015161121e9092919063ffffffff16565b905060006108eb6108688760048c6060015161121e9092919063ffffffff16565b60608a0151909150600090610906906108689089600561121e565b9050428410156109565760405162461bcd60e51b815260206004820152601660248201527514195c9b5a5d12185b991b195c8e881156141254915160521b60448201526064015b60405180910390fd5b60025460608b015151604051600092916109b7917ff0068b55d48516e90ff15efedf75d8cf4527ef16af13fa3e14f546f4a19330a6918a918a9060200193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001206040516020016109f492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610a5f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610a9157506004546001600160a01b038281169116145b610add5760405162461bcd60e51b815260206004820181905260248201527f5065726d697448616e646c65723a20494e56414c49445f5349474e4154555245604482015260640161094d565b5050505050505050505b50805b92915050565b60408051600580825260c0820190925260609160009190816020015b6060815260200190600190039081610b0c579050509050610b596040518060400160405280600e81526020016d0626c6f636b54696d657374616d760941b8152504263ffffffff166112b8565b81600081518110610b6c57610b6c613823565b6020026020010181905250610bb16040518060400160405280600b81526020016a313637b1b5a73ab6b132b960a91b815250610ba6611399565b63ffffffff166112b8565b81600181518110610bc457610bc4613823565b6020026020010181905250610c0c6040518060400160405280600681526020016539b4b3b732b960d11b815250600460009054906101000a90046001600160a01b0316611425565b81600381518110610c1f57610c1f613823565b602090810291909101015292915050565b600080610c5a3384602001518560600151866040015187608001518860a001518960e00151611026565b600081815260086020526040812060c08601519293509160ff16610cee5761012085015160408051845460208181028301840184528201818152610ce794938792849291849190840182828015610cd057602002820191906000526020600020905b815481526020019060010190808311610cbc575b50505050508152505061109590919063ffffffff16565b9050610d60565b61012085015160408051845460208181028301840184528201818152610d5d94938792849291849190840182828015610d4657602002820191906000526020600020905b815481526020019060010190808311610d32575b50505050508152505061112890919063ffffffff16565b90505b806104915760c085015160ff16610d8757610120850151610d829083906114b9565b610491565b610120850151610491908390611569565b600054610100900460ff1615808015610db85750600054600160ff909116105b80610dd25750303b158015610dd2575060005460ff166001145b610e355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161094d565b6000805460ff191660011790558015610e58576000805461ff0019166101001790555b600480546001600160a01b0319166001600160a01b03841617905560408051808201825260018152603160f81b60209182015281517f18429537d4bbe008ca9bedc617961440109eb9ecb1ca879f00ba3a30e8f908fe818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681840152466060820152306080808301919091528351808303909101815260a0909101909252815191012060025580156102fb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060600033858585604051602001610f6594939291906137f0565b6040516020818303038152906040528051906020012090506000600660008381526020019081526020016000208054610f9d90613778565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc990613778565b80156110165780601f10610feb57610100808354040283529160200191611016565b820191906000526020600020905b815481529060010190602001808311610ff957829003601f168201915b50939a9950505050505050505050565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b600061111e83600001516000815181106110b1576110b1613823565b6020026020010151600184600060086110ca919061384f565b6110d590600461384f565b6110e090600861384f565b6110eb90600461384f565b6110f690601061384f565b61110190601861384f565b61110c90602061384f565b611116919061384f565b60ff166115e1565b6001149392505050565b600061111e836000015160008151811061114457611144613823565b60200260200101516001846000600861115d919061384f565b61116890600461384f565b61117390600861384f565b61117e90600461384f565b61118990601061384f565b61119490601861384f565b61110190602061384f565b6000806111b36111ae85611600565b611626565b90506104916111dd828560ff16815181106111d0576111d0613823565b6020026020010151611626565b6002815181106111ef576111ef613823565b602002602001015161172f565b60015461120c576301312d006001555b5a600155565b6060610aea8230611749565b61122661209a565b6112488361123584600161384f565b60ff16815181106111d0576111d0613823565b60028151811061125a5761125a613823565b602002602001015190509392505050565b80516000901580159061128057508151602110155b61128957600080fd5b600080611295846117ef565b8151919350915060208210156104915760208290036101000a9004949350505050565b606060006112c584611836565b905060006112d284611841565b6040805160038082526080820190925291925060009190816020015b60608152602001906001900390816112ee579050509050828160008151811061131957611319613823565b6020026020010181905250611349604051806040016040528060048152602001631d5a5b9d60e21b815250611836565b8160018151811061135c5761135c613823565b6020026020010181905250818160028151811061137b5761137b613823565b602002602001018190525061138f81611854565b9695505050505050565b60004661a4b181141561141e5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e057600080fd5b505afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114189190613874565b91505090565b4391505090565b6060600061143284611836565b9050600061143f8461187f565b6040805160038082526080820190925291925060009190816020015b606081526020019060019003908161145b579050509050828160008151811061148657611486613823565b6020026020010181905250611349604051806040016040528060078152602001666164647265737360c81b815250611836565b611543826000016000815481106114d2576114d2613823565b906000526020600020015460018084600060086114ef919061384f565b6114fa90600461384f565b61150590600861384f565b61151090600461384f565b61151b90601061384f565b61152690601861384f565b61153190602061384f565b61153b919061384f565b60ff166118a2565b8260000160008154811061155957611559613823565b6000918252602090912001555050565b6115438260000160008154811061158257611582613823565b9060005260206000200154600180846000600861159f919061384f565b6115aa90600461384f565b6115b590600861384f565b6115c090600461384f565b6115cb90601061384f565b6115d690601861384f565b61152690602061384f565b91821c916000806115f5600180861b61388d565b909416949350505050565b61160861209a565b50604080518082019091528151815260209182019181019190915290565b6060611631826118c7565b61163a57600080fd5b600061164583611900565b90506000816001600160401b03811115611661576116616120c9565b60405190808252806020026020018201604052801561169a57816020015b61168761209a565b81526020019060019003908161167f5790505b50905060006116ac8560200151611983565b85602001516116bb91906138a4565b90506000805b84811015611724576116d283611a04565b91506040518060400160405280838152602001848152508482815181106116fb576116fb613823565b602090810291909101015261171082846138a4565b92508061171c816138bc565b9150506116c1565b509195945050505050565b805160009060151461174057600080fd5b610aea8261126b565b6060600061175e6111ae856101600151611600565b905060005b81518110156117e45760006117986117868484815181106111d0576111d0613823565b6000815181106111ef576111ef613823565b9050846001600160a01b0316816001600160a01b031614156117d3576117c98383815181106111d0576111d0613823565b9350505050610aea565b506117dd816138bc565b9050611763565b506060949350505050565b60008060006118018460200151611983565b9050600081856020015161181591906138a4565b90506000828660000151611829919061388d565b9196919550909350505050565b6060610aea82611aad565b6060610aea61184f83611afd565b611aad565b6060600061186183611c3a565b9050611878611872825160c0611d6b565b82611f21565b9392505050565b60408051600560a21b831860148201526034810190915260609061187881611aad565b600083821b81836118b6600180881b61388d565b901b19969096161795945050505050565b80516000906118d857506000919050565b6020820151805160001a9060c08210156118f6575060009392505050565b5060019392505050565b805160009061191157506000919050565b6000806119218460200151611983565b846020015161193091906138a4565b905060008460000151856020015161194891906138a4565b90505b8082101561197a5761195c82611a04565b61196690836138a4565b915082611972816138bc565b93505061194b565b50909392505050565b8051600090811a608081101561199c5750600092915050565b60b88110806119b7575060c081108015906119b7575060f881105b156119c55750600192915050565b60c08110156119f2576119da600160b86138d7565b6119e79060ff168261388d565b6118789060016138a4565b6119da600160f86138d7565b50919050565b80516000908190811a6080811015611a1f5760019150611aa6565b60b8811015611a4557611a3360808261388d565b611a3e9060016138a4565b9150611aa6565b60c0811015611a725760b78103600185019450806020036101000a85510460018201810193505050611aa6565b60f8811015611a8657611a3360c08261388d565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60608082516001148015611adc5750608083600081518110611ad157611ad1613823565b016020015160f81c11155b15611ae8575081610aea565b611878611af784516080611d6b565b84611f21565b6040805160208082528183019092526060916000919060208201818036833701905050905082602082015260005b6020811015611b7157818181518110611b4657611b46613823565b01602001516001600160f81b03191615611b5f57611b71565b80611b69816138bc565b915050611b2b565b6000611b7e82602061388d565b6001600160401b03811115611b9557611b956120c9565b6040519080825280601f01601f191660200182016040528015611bbf576020820181803683370190505b50905060005b8151811015611c31578383611bd9816138bc565b945081518110611beb57611beb613823565b602001015160f81c60f81b828281518110611c0857611c08613823565b60200101906001600160f81b031916908160001a90535080611c29816138bc565b915050611bc5565b50949350505050565b6060815160001415611c5c576040805160008082526020820190925290611aa6565b6000805b8351811015611ca357838181518110611c7b57611c7b613823565b60200260200101515182611c8f91906138a4565b915080611c9b816138bc565b915050611c60565b6000826001600160401b03811115611cbd57611cbd6120c9565b6040519080825280601f01601f191660200182016040528015611ce7576020820181803683370190505b50600092509050602081015b8551831015611c31576000868481518110611d1057611d10613823565b602002602001015190506000602082019050611d2e83828451611f9e565b878581518110611d4057611d40613823565b60200260200101515183611d5491906138a4565b925050508280611d63906138bc565b935050611cf3565b6060806038841015611dd55760408051600180825281830190925290602082018180368337019050509050611da083856138a4565b601f1a60f81b81600081518110611db957611db9613823565b60200101906001600160f81b031916908160001a905350611878565b600060015b611de48187613910565b15611e0a5781611df3816138bc565b9250611e03905061010082613924565b9050611dda565b611e158260016138a4565b6001600160401b03811115611e2c57611e2c6120c9565b6040519080825280601f01601f191660200182016040528015611e56576020820181803683370190505b509250611e6385836138a4565b611e6e9060376138a4565b601f1a60f81b83600081518110611e8757611e87613823565b60200101906001600160f81b031916908160001a905350600190505b818111611f1857610100611eb7828461388d565b611ec390610100613a27565b611ecd9088613910565b611ed79190613a33565b601f1a60f81b838281518110611eef57611eef613823565b60200101906001600160f81b031916908160001a90535080611f10816138bc565b915050611ea3565b50509392505050565b6060806040519050835180825260208201818101602087015b81831015611f52578051835260209283019201611f3a565b50855184518101855292509050808201602086015b81831015611f7f578051835260209283019201611f67565b508651929092011591909101601f01601f191660405250905092915050565b8282825b60208110611fda5781518352611fb96020846138a4565b9250611fc66020836138a4565b9150611fd360208261388d565b9050611fa2565b60006001611fe983602061388d565b611ff590610100613a27565b611fff919061388d565b925184518416931916929092179092525050505050565b82805461202290613778565b90600052602060002090601f016020900481019282612044576000855561208a565b82601f1061205d57805160ff191683800117855561208a565b8280016001018555821561208a579182015b8281111561208a57825182559160200191906001019061206f565b506120969291506120b4565b5090565b604051806040016040528060008152602001600081525090565b5b8082111561209657600081556001016120b5565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715612102576121026120c9565b60405290565b60405160a081016001600160401b0381118282101715612102576121026120c9565b604080519081016001600160401b0381118282101715612102576121026120c9565b604051608081016001600160401b0381118282101715612102576121026120c9565b60405161018081016001600160401b0381118282101715612102576121026120c9565b604051606081016001600160401b0381118282101715612102576121026120c9565b60405161016081016001600160401b0381118282101715612102576121026120c9565b604051601f8201601f191681016001600160401b03811182821017156121fe576121fe6120c9565b604052919050565b80356001600160a01b038116811461221d57600080fd5b919050565b803563ffffffff8116811461221d57600080fd5b803560ff8116811461221d57600080fd5b803561ffff8116811461221d57600080fd5b6000610140828403121561226c57600080fd5b6122746120df565b61227d83612206565b815261228b60208401612206565b602082015261229c60408401612206565b60408201526122ad60608401612222565b60608201526122be60808401612222565b60808201526122cf60a08401612206565b60a08201526122e060c08401612236565b60c08201526122f160e08401612247565b60e0820152610100612304818501612236565b90820152610120612316848201612236565b908201529392505050565b600082601f83011261233257600080fd5b81356001600160401b0381111561234b5761234b6120c9565b61235e601f8201601f19166020016121d6565b81815284602083860101111561237357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156123ad57600080fd5b6123b689612206565b97506123c460208a01612206565b96506123d260408a01612206565b95506123e060608a01612222565b94506123ee60808a01612206565b93506123fc60a08a01612222565b925060c08901356001600160401b0381111561241757600080fd5b6124238b828c01612321565b92505061243260e08a01612247565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156124865783518252928401926001929092019190840190612466565b509695505050505050565b6000602082840312156124a357600080fd5b5035919050565b6000815180845260005b818110156124d0576020818501810151868301820152016124b4565b818111156124e2576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061187860208301846124aa565b60008060008060008060c0878903121561252357600080fd5b61252c87612206565b955061253a60208801612206565b945061254860408801612222565b935061255660608801612206565b925061256460808801612222565b915061257260a08801612247565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156125bf5783516001600160a01b03168352928401929184019160010161259a565b50909695505050505050565b600080600080608085870312156125e157600080fd5b6125ea85612222565b93506125f860208601612247565b925061260660408601612236565b915060608501356001600160401b0381111561262157600080fd5b61262d87828801612321565b91505092959194509250565b60006001600160401b03821115612652576126526120c9565b5060051b60200190565b6000602080838503121561266f57600080fd5b82356001600160401b038082111561268657600080fd5b818501915085601f83011261269a57600080fd5b81356126ad6126a882612639565b6121d6565b81815260059190911b830184019084810190888311156126cc57600080fd5b8585015b83811015612704578035858111156126e85760008081fd5b6126f68b89838a0101612321565b8452509186019186016126d0565b5098975050505050505050565b60008060008060008060a0878903121561272a57600080fd5b61273387612222565b955061274160208801612247565b945061274f60408801612247565b935061275d60608801612236565b925060808701356001600160401b038082111561277957600080fd5b818901915089601f83011261278d57600080fd5b81358181111561279c57600080fd5b8a60208285010111156127ae57600080fd5b6020830194508093505050509295509295509295565b600082601f8301126127d557600080fd5b813560206127e56126a883612639565b82815260059290921b8401810191818101908684111561280457600080fd5b8286015b848110156124865780356001600160401b038082111561282757600080fd5b9088019060a0828b03601f1901121561283f57600080fd5b612847612108565b612852878401612236565b81526040612861818501612206565b888301526060840135818301526080840135606083015260a08401358381111561288b5760008081fd5b8085019450508b603f8501126128a357600092508283fd5b8784013592506128b56126a884612639565b83815260069390931b8401810192888101908d8511156128d55760008081fd5b948201945b8486101561292c5782868f0312156128f25760008081fd5b6128fa61212a565b61290387612222565b81528a8701358060040b81146129195760008081fd5b818c0152825294820194908901906128da565b6080840152505085525050918301918301612808565b60006080828403121561295457600080fd5b61295c61214c565b905061296782612206565b815261297560208301612236565b602082015260408201356001600160401b038082111561299457600080fd5b6129a085838601612321565b604084015260608401359150808211156129b957600080fd5b506129c684828501612321565b60608301525092915050565b600080604083850312156129e557600080fd5b82356001600160401b03808211156129fc57600080fd5b9084019060a08287031215612a1057600080fd5b612a18612108565b612a2183612206565b8152612a2f60208401612206565b6020820152612a4060408401612206565b6040820152606083013582811115612a5757600080fd5b83016101808189031215612a6a57600080fd5b612a7261216e565b612a7b82612206565b8152612a8960208301612206565b6020820152612a9a60408301612206565b6040820152612aab60608301612206565b60608201526080820135608082015260a082013560a0820152612ad060c08301612222565b60c0820152612ae160e08301612222565b60e0820152610100612af4818401612222565b90820152610120612b06838201612236565b908201526101408281013585811115612b1e57600080fd5b612b2a8b8286016127c4565b8284015250506101608083013585811115612b4457600080fd5b612b508b828601612321565b8284015250508060608401525050612b6a60808401612236565b608082015293506020850135915080821115612b8557600080fd5b50612b9285828601612942565b9150509250929050565b6020815260018060a01b03825116602082015260ff60208301511660408201526000604083015160806060840152612bd760a08401826124aa565b90506060840151601f19848303016080850152612bf482826124aa565b95945050505050565b600082601f830112612c0e57600080fd5b81356020612c1e6126a883612639565b82815260059290921b84018101918181019086841115612c3d57600080fd5b8286015b848110156124865780358352918301918301612c41565b600082601f830112612c6957600080fd5b81356020612c796126a883612639565b82815260059290921b84018101918181019086841115612c9857600080fd5b8286015b8481101561248657612cad81612206565b8352918301918301612c9c565b600082601f830112612ccb57600080fd5b81356020612cdb6126a883612639565b82815260059290921b84018101918181019086841115612cfa57600080fd5b8286015b848110156124865780356001600160401b0380821115612d1d57600080fd5b90880190601f196080838c0382011215612d3657600080fd5b612d3e61214c565b8784013583811115612d4f57600080fd5b84016060818e0384011215612d6357600080fd5b612d6b612191565b9250612d78898201612236565b83526040612d87818301612206565b8a850152606082013585811115612d9d57600080fd5b612dab8f8c83860101612bfd565b8286015250838352612dbe818701612236565b8a8401526060860135935084841115612dd657600080fd5b612de48e8b86890101612c58565b90830152506080840135915082821115612dfd57600080fd5b612e0b8c8984870101612bfd565b60608201528652505050918301918301612cfe565b600082601f830112612e3157600080fd5b81356020612e416126a883612639565b82815260059290921b84018101918181019086841115612e6057600080fd5b8286015b848110156124865780356001600160401b03811115612e835760008081fd5b612e918986838b0101612321565b845250918301918301612e64565b600082601f830112612eb057600080fd5b81356020612ec06126a883612639565b82815260059290921b84018101918181019086841115612edf57600080fd5b8286015b848110156124865780356001600160401b0380821115612f035760008081fd5b9088019060a0828b03601f1901811315612f1d5760008081fd5b612f25612108565b8784013583811115612f375760008081fd5b612f458d8a83880101612cba565b8252506040612f55818601612236565b898301526060612f66818701612206565b82840152608091508186013585811115612f805760008081fd5b612f8e8f8c838a0101612c58565b82850152505082850135925083831115612fa85760008081fd5b612fb68d8a85880101612e20565b908201528652505050918301918301612ee3565b600082601f830112612fdb57600080fd5b81356020612feb6126a883612639565b82815260059290921b8401810191818101908684111561300a57600080fd5b8286015b848110156124865761301f81612236565b835291830191830161300e565b80356001600160401b038116811461221d57600080fd5b600082601f83011261305457600080fd5b813560206130646126a883612639565b82815260059290921b8401810191818101908684111561308357600080fd5b8286015b848110156124865780356001600160401b03808211156130a75760008081fd5b90880190610160828b03601f19018113156130c25760008081fd5b6130ca6121b3565b6130d5888501612247565b815260406130e4818601612247565b8983015260606130f5818701612236565b8284015260809150613108828701612222565b9083015260a0613119868201612236565b8284015260c0915061312c828701612222565b9083015260e061313d868201612222565b82840152610100915061315182870161302c565b90830152610120858101358581111561316a5760008081fd5b6131788f8c838a0101612c58565b8385015250610140915081860135858111156131945760008081fd5b6131a28f8c838a0101612e20565b8285015250506131b3838601612206565b908201528652505050918301918301613087565b600082601f8301126131d857600080fd5b813560206131e86126a883612639565b82815260059290921b8401810191818101908684111561320757600080fd5b8286015b848110156124865780356001600160401b038082111561322b5760008081fd5b9088019060a0828b03601f19018113156132455760008081fd5b61324d612108565b613258888501612222565b81526040808501358481111561326e5760008081fd5b61327c8e8b83890101612321565b8a84015250606080860135858111156132955760008081fd5b6132a38f8c838a0101612321565b83850152506080915081860135858111156132be5760008081fd5b6132cc8f8c838a0101612321565b8285015250506132dd838601612236565b90820152865250505091830191830161320b565b6000806040838503121561330457600080fd5b61330d83612222565b915060208301356001600160401b038082111561332957600080fd5b90840190610160828703121561333e57600080fd5b6133466121b3565b82358281111561335557600080fd5b61336188828601612e9f565b82525060208301358281111561337657600080fd5b61338288828601612fca565b60208301525060408301358281111561339a57600080fd5b6133a688828601613043565b6040830152506060830135828111156133be57600080fd5b6133ca888286016131c7565b6060830152506080830135828111156133e257600080fd5b6133ee88828601612fca565b60808301525060a08301358281111561340657600080fd5b61341288828601612c58565b60a08301525060c08301358281111561342a57600080fd5b61343688828601612c58565b60c08301525061344860e08401612222565b60e082015261010061345b818501612222565b9082015261012061346d848201612236565b90820152610140838101358381111561348557600080fd5b61349189828701612321565b8284015250508093505050509250929050565b6000602082840312156134b657600080fd5b81356001600160401b03808211156134cd57600080fd5b9083019061016082860312156134e257600080fd5b6134ea6121b3565b6134f383612206565b815261350160208401612206565b602082015261351260408401612222565b604082015261352360608401612247565b606082015261353460808401612247565b608082015261354560a08401612236565b60a082015261355660c08401612206565b60c082015261356760e08401612222565b60e082015261010061357a818501612206565b9082015261012061358c848201612236565b9082015261014083810135838111156135a457600080fd5b6135b088828701612321565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561361657603f198886030184526136048583516124aa565b945092850192908501906001016135e8565b5092979650505050505050565b60006020828403121561363557600080fd5b81356001600160401b0381111561364b57600080fd5b61049184828501612c58565b60006020828403121561366957600080fd5b61187882612206565b60008060006060848603121561368757600080fd5b61369084612222565b925061369e60208501612247565b91506136ac60408501612236565b90509250925092565b600081518084526020808501945080840160005b838110156136e857815160ff16875295820195908201906001016136c9565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561376a57888303603f190185528151805187855261373e888601826136b5565b91890151858303868b015291905061375681836136b5565b96890196945050509086019060010161371a565b509098975050505050505050565b600181811c9082168061378c57607f821691505b602082108114156119fe57634e487b7160e01b600052602260045260246000fd5b6001600160a01b039687168152948616602086015263ffffffff93841660408601529190941660608401529216608082015261ffff90911660a082015260c00190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561386c5761386c613839565b019392505050565b60006020828403121561388657600080fd5b5051919050565b60008282101561389f5761389f613839565b500390565b600082198211156138b7576138b7613839565b500190565b60006000198214156138d0576138d0613839565b5060010190565b600060ff821660ff8416808210156138f1576138f1613839565b90039392505050565b634e487b7160e01b600052601260045260246000fd5b60008261391f5761391f6138fa565b500490565b600081600019048311821515161561393e5761393e613839565b500290565b600181815b8085111561397e57816000190482111561396457613964613839565b8085161561397157918102915b93841c9390800290613948565b509250929050565b60008261399557506001610aea565b816139a257506000610aea565b81600181146139b857600281146139c2576139de565b6001915050610aea565b60ff8411156139d3576139d3613839565b50506001821b610aea565b5060208310610133831016604e8410600b8410161715613a01575081810a610aea565b613a0b8383613943565b8060001904821115613a1f57613a1f613839565b029392505050565b60006118788383613986565b600082613a4257613a426138fa565b50069056fea2646970667358221220c11bf4e2795ccde753df5cc76d83190eb3918f38ac91e77a957a0e3e086898d764736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012d5760003560e01c80635790c294116100b35780635790c2941461028b57806362329cc5146102a05780636dabaf04146102b357806395edcb08146102cd578063a903620c146102ed578063af84b51f146102ff578063b41bd7891461031f578063b4b7035214610330578063c4d66de814610343578063d0d35b5514610356578063f2fe4fa514610369578063f96f58271461037857600080fd5b80631cc4f041146101325780631eda6e4f1461015a578063238ac9331461017a57806328334714146101a557806330adf81f146101ce57806334c76b25146102035780633644e51514610235578063394a73981461023e5780634b2dbcb8146102515780634b2e9b411461027157806354fd4d5014610284575b600080fd5b610145610140366004612259565b6103b9565b60405190151581526020015b60405180910390f35b61016d610168366004612390565b610499565b6040516101519190612441565b60045461018d906001600160a01b031681565b6040516001600160a01b039091168152602001610151565b61018d6101b3366004612491565b6007602052600090815260409020546001600160a01b031681565b6101f57ff0068b55d48516e90ff15efedf75d8cf4527ef16af13fa3e14f546f4a19330a681565b604051908152602001610151565b60408051808201909152600d81526c2832b936b4ba2430b7323632b960991b60208201525b60405161015191906124f7565b6101f560025481565b61022861024c366004612491565b61052f565b61026461025f36600461250a565b6105c9565b604051610151919061257e565b61026461027f36600461250a565b61066b565b60016101f5565b61029e6102993660046125cb565b61070b565b005b6102646102ae36600461265c565b61079b565b6101456102c1366004612711565b60019695505050505050565b6102e06102db3660046129d2565b6107e9565b6040516101519190612b9c565b61029e6102fb3660046132f1565b5050565b61031261030d3660046134a4565b610af0565b60405161015191906135c1565b61029e61032d366004613623565b50565b61014561033e366004612259565b610c30565b61029e610351366004613657565b610d98565b610228610364366004613672565b610f4a565b606060405161015191906136f3565b6103a1610386366004612491565b6005602052600090815260409020546001600160801b031681565b6040516001600160801b039091168152602001610151565b6000806103e7836000015184602001518560600151866040015187608001518860a001518960e00151611026565b60008181526008602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561044657602002820191906000526020600020905b815481526020019060010190808311610432575b505050505081525050905060008060ff168560c0015160ff16141561047d57610120850151610476908390611095565b9050610491565b61012085015161048e908390611128565b90505b949350505050565b60408051602081019091526060815260006104b98a898989898e89611026565b600081815260086020908152604091829020825181548084028201850185529281018381529495509390928492849184018282801561051757602002820191906000526020600020905b815481526020019060010190808311610503575b50505050508152505091505098975050505050505050565b6006602052600090815260409020805461054890613778565b80601f016020809104026020016040519081016040528092919081815260200182805461057490613778565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b505050505081565b606060008787878787876040516020016105e8969594939291906137ad565b60408051601f1981840301815282825280516020918201206000818152600a8352839020805480840286018401909452838552909450919083018282801561065957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161063b575b50505050509150509695505050505050565b6060600087878787878760405160200161068a969594939291906137ad565b60408051601f1981840301815282825280516020918201206000818152600983528390208054808402860184019094528385529094509190830182828015610659576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161063b5750505050509150509695505050505050565b60003385858560405160200161072494939291906137f0565b60408051601f19818403018152918152815160209283012060008181526006845291909120845191935061075d92909190850190612016565b5061076982600061119f565b60009182526007602052604090912080546001600160a01b0319166001600160a01b0390921691909117905550505050565b6060600082516001600160401b038111156107b8576107b86120c9565b6040519080825280602002602001820160405280156107e1578160200160208202803683370190505b509392505050565b60408051608081018252600080825260208201526060918101829052818101919091526108146111fc565b308252608083015160ff1661082857610ae7565b608083015160ff1660011415610ae75760006108478460600151611212565b9050600061086d610868836000886060015161121e9092919063ffffffff16565b61126b565b9050600061088e610868846001896060015161121e9092919063ffffffff16565b60608701519091506000906108a9906108689086600261121e565b905060006108ca6108688660038b6060015161121e9092919063ffffffff16565b905060006108eb6108688760048c6060015161121e9092919063ffffffff16565b60608a0151909150600090610906906108689089600561121e565b9050428410156109565760405162461bcd60e51b815260206004820152601660248201527514195c9b5a5d12185b991b195c8e881156141254915160521b60448201526064015b60405180910390fd5b60025460608b015151604051600092916109b7917ff0068b55d48516e90ff15efedf75d8cf4527ef16af13fa3e14f546f4a19330a6918a918a9060200193845260208401929092526001600160a01b03166040830152606082015260800190565b604051602081830303815290604052805190602001206040516020016109f492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610a5f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610a9157506004546001600160a01b038281169116145b610add5760405162461bcd60e51b815260206004820181905260248201527f5065726d697448616e646c65723a20494e56414c49445f5349474e4154555245604482015260640161094d565b5050505050505050505b50805b92915050565b60408051600580825260c0820190925260609160009190816020015b6060815260200190600190039081610b0c579050509050610b596040518060400160405280600e81526020016d0626c6f636b54696d657374616d760941b8152504263ffffffff166112b8565b81600081518110610b6c57610b6c613823565b6020026020010181905250610bb16040518060400160405280600b81526020016a313637b1b5a73ab6b132b960a91b815250610ba6611399565b63ffffffff166112b8565b81600181518110610bc457610bc4613823565b6020026020010181905250610c0c6040518060400160405280600681526020016539b4b3b732b960d11b815250600460009054906101000a90046001600160a01b0316611425565b81600381518110610c1f57610c1f613823565b602090810291909101015292915050565b600080610c5a3384602001518560600151866040015187608001518860a001518960e00151611026565b600081815260086020526040812060c08601519293509160ff16610cee5761012085015160408051845460208181028301840184528201818152610ce794938792849291849190840182828015610cd057602002820191906000526020600020905b815481526020019060010190808311610cbc575b50505050508152505061109590919063ffffffff16565b9050610d60565b61012085015160408051845460208181028301840184528201818152610d5d94938792849291849190840182828015610d4657602002820191906000526020600020905b815481526020019060010190808311610d32575b50505050508152505061112890919063ffffffff16565b90505b806104915760c085015160ff16610d8757610120850151610d829083906114b9565b610491565b610120850151610491908390611569565b600054610100900460ff1615808015610db85750600054600160ff909116105b80610dd25750303b158015610dd2575060005460ff166001145b610e355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161094d565b6000805460ff191660011790558015610e58576000805461ff0019166101001790555b600480546001600160a01b0319166001600160a01b03841617905560408051808201825260018152603160f81b60209182015281517f18429537d4bbe008ca9bedc617961440109eb9ecb1ca879f00ba3a30e8f908fe818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681840152466060820152306080808301919091528351808303909101815260a0909101909252815191012060025580156102fb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060600033858585604051602001610f6594939291906137f0565b6040516020818303038152906040528051906020012090506000600660008381526020019081526020016000208054610f9d90613778565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc990613778565b80156110165780601f10610feb57610100808354040283529160200191611016565b820191906000526020600020905b815481529060010190602001808311610ff957829003601f168201915b50939a9950505050505050505050565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b600061111e83600001516000815181106110b1576110b1613823565b6020026020010151600184600060086110ca919061384f565b6110d590600461384f565b6110e090600861384f565b6110eb90600461384f565b6110f690601061384f565b61110190601861384f565b61110c90602061384f565b611116919061384f565b60ff166115e1565b6001149392505050565b600061111e836000015160008151811061114457611144613823565b60200260200101516001846000600861115d919061384f565b61116890600461384f565b61117390600861384f565b61117e90600461384f565b61118990601061384f565b61119490601861384f565b61110190602061384f565b6000806111b36111ae85611600565b611626565b90506104916111dd828560ff16815181106111d0576111d0613823565b6020026020010151611626565b6002815181106111ef576111ef613823565b602002602001015161172f565b60015461120c576301312d006001555b5a600155565b6060610aea8230611749565b61122661209a565b6112488361123584600161384f565b60ff16815181106111d0576111d0613823565b60028151811061125a5761125a613823565b602002602001015190509392505050565b80516000901580159061128057508151602110155b61128957600080fd5b600080611295846117ef565b8151919350915060208210156104915760208290036101000a9004949350505050565b606060006112c584611836565b905060006112d284611841565b6040805160038082526080820190925291925060009190816020015b60608152602001906001900390816112ee579050509050828160008151811061131957611319613823565b6020026020010181905250611349604051806040016040528060048152602001631d5a5b9d60e21b815250611836565b8160018151811061135c5761135c613823565b6020026020010181905250818160028151811061137b5761137b613823565b602002602001018190525061138f81611854565b9695505050505050565b60004661a4b181141561141e5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113e057600080fd5b505afa1580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114189190613874565b91505090565b4391505090565b6060600061143284611836565b9050600061143f8461187f565b6040805160038082526080820190925291925060009190816020015b606081526020019060019003908161145b579050509050828160008151811061148657611486613823565b6020026020010181905250611349604051806040016040528060078152602001666164647265737360c81b815250611836565b611543826000016000815481106114d2576114d2613823565b906000526020600020015460018084600060086114ef919061384f565b6114fa90600461384f565b61150590600861384f565b61151090600461384f565b61151b90601061384f565b61152690601861384f565b61153190602061384f565b61153b919061384f565b60ff166118a2565b8260000160008154811061155957611559613823565b6000918252602090912001555050565b6115438260000160008154811061158257611582613823565b9060005260206000200154600180846000600861159f919061384f565b6115aa90600461384f565b6115b590600861384f565b6115c090600461384f565b6115cb90601061384f565b6115d690601861384f565b61152690602061384f565b91821c916000806115f5600180861b61388d565b909416949350505050565b61160861209a565b50604080518082019091528151815260209182019181019190915290565b6060611631826118c7565b61163a57600080fd5b600061164583611900565b90506000816001600160401b03811115611661576116616120c9565b60405190808252806020026020018201604052801561169a57816020015b61168761209a565b81526020019060019003908161167f5790505b50905060006116ac8560200151611983565b85602001516116bb91906138a4565b90506000805b84811015611724576116d283611a04565b91506040518060400160405280838152602001848152508482815181106116fb576116fb613823565b602090810291909101015261171082846138a4565b92508061171c816138bc565b9150506116c1565b509195945050505050565b805160009060151461174057600080fd5b610aea8261126b565b6060600061175e6111ae856101600151611600565b905060005b81518110156117e45760006117986117868484815181106111d0576111d0613823565b6000815181106111ef576111ef613823565b9050846001600160a01b0316816001600160a01b031614156117d3576117c98383815181106111d0576111d0613823565b9350505050610aea565b506117dd816138bc565b9050611763565b506060949350505050565b60008060006118018460200151611983565b9050600081856020015161181591906138a4565b90506000828660000151611829919061388d565b9196919550909350505050565b6060610aea82611aad565b6060610aea61184f83611afd565b611aad565b6060600061186183611c3a565b9050611878611872825160c0611d6b565b82611f21565b9392505050565b60408051600560a21b831860148201526034810190915260609061187881611aad565b600083821b81836118b6600180881b61388d565b901b19969096161795945050505050565b80516000906118d857506000919050565b6020820151805160001a9060c08210156118f6575060009392505050565b5060019392505050565b805160009061191157506000919050565b6000806119218460200151611983565b846020015161193091906138a4565b905060008460000151856020015161194891906138a4565b90505b8082101561197a5761195c82611a04565b61196690836138a4565b915082611972816138bc565b93505061194b565b50909392505050565b8051600090811a608081101561199c5750600092915050565b60b88110806119b7575060c081108015906119b7575060f881105b156119c55750600192915050565b60c08110156119f2576119da600160b86138d7565b6119e79060ff168261388d565b6118789060016138a4565b6119da600160f86138d7565b50919050565b80516000908190811a6080811015611a1f5760019150611aa6565b60b8811015611a4557611a3360808261388d565b611a3e9060016138a4565b9150611aa6565b60c0811015611a725760b78103600185019450806020036101000a85510460018201810193505050611aa6565b60f8811015611a8657611a3360c08261388d565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60608082516001148015611adc5750608083600081518110611ad157611ad1613823565b016020015160f81c11155b15611ae8575081610aea565b611878611af784516080611d6b565b84611f21565b6040805160208082528183019092526060916000919060208201818036833701905050905082602082015260005b6020811015611b7157818181518110611b4657611b46613823565b01602001516001600160f81b03191615611b5f57611b71565b80611b69816138bc565b915050611b2b565b6000611b7e82602061388d565b6001600160401b03811115611b9557611b956120c9565b6040519080825280601f01601f191660200182016040528015611bbf576020820181803683370190505b50905060005b8151811015611c31578383611bd9816138bc565b945081518110611beb57611beb613823565b602001015160f81c60f81b828281518110611c0857611c08613823565b60200101906001600160f81b031916908160001a90535080611c29816138bc565b915050611bc5565b50949350505050565b6060815160001415611c5c576040805160008082526020820190925290611aa6565b6000805b8351811015611ca357838181518110611c7b57611c7b613823565b60200260200101515182611c8f91906138a4565b915080611c9b816138bc565b915050611c60565b6000826001600160401b03811115611cbd57611cbd6120c9565b6040519080825280601f01601f191660200182016040528015611ce7576020820181803683370190505b50600092509050602081015b8551831015611c31576000868481518110611d1057611d10613823565b602002602001015190506000602082019050611d2e83828451611f9e565b878581518110611d4057611d40613823565b60200260200101515183611d5491906138a4565b925050508280611d63906138bc565b935050611cf3565b6060806038841015611dd55760408051600180825281830190925290602082018180368337019050509050611da083856138a4565b601f1a60f81b81600081518110611db957611db9613823565b60200101906001600160f81b031916908160001a905350611878565b600060015b611de48187613910565b15611e0a5781611df3816138bc565b9250611e03905061010082613924565b9050611dda565b611e158260016138a4565b6001600160401b03811115611e2c57611e2c6120c9565b6040519080825280601f01601f191660200182016040528015611e56576020820181803683370190505b509250611e6385836138a4565b611e6e9060376138a4565b601f1a60f81b83600081518110611e8757611e87613823565b60200101906001600160f81b031916908160001a905350600190505b818111611f1857610100611eb7828461388d565b611ec390610100613a27565b611ecd9088613910565b611ed79190613a33565b601f1a60f81b838281518110611eef57611eef613823565b60200101906001600160f81b031916908160001a90535080611f10816138bc565b915050611ea3565b50509392505050565b6060806040519050835180825260208201818101602087015b81831015611f52578051835260209283019201611f3a565b50855184518101855292509050808201602086015b81831015611f7f578051835260209283019201611f67565b508651929092011591909101601f01601f191660405250905092915050565b8282825b60208110611fda5781518352611fb96020846138a4565b9250611fc66020836138a4565b9150611fd360208261388d565b9050611fa2565b60006001611fe983602061388d565b611ff590610100613a27565b611fff919061388d565b925184518416931916929092179092525050505050565b82805461202290613778565b90600052602060002090601f016020900481019282612044576000855561208a565b82601f1061205d57805160ff191683800117855561208a565b8280016001018555821561208a579182015b8281111561208a57825182559160200191906001019061206f565b506120969291506120b4565b5090565b604051806040016040528060008152602001600081525090565b5b8082111561209657600081556001016120b5565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715612102576121026120c9565b60405290565b60405160a081016001600160401b0381118282101715612102576121026120c9565b604080519081016001600160401b0381118282101715612102576121026120c9565b604051608081016001600160401b0381118282101715612102576121026120c9565b60405161018081016001600160401b0381118282101715612102576121026120c9565b604051606081016001600160401b0381118282101715612102576121026120c9565b60405161016081016001600160401b0381118282101715612102576121026120c9565b604051601f8201601f191681016001600160401b03811182821017156121fe576121fe6120c9565b604052919050565b80356001600160a01b038116811461221d57600080fd5b919050565b803563ffffffff8116811461221d57600080fd5b803560ff8116811461221d57600080fd5b803561ffff8116811461221d57600080fd5b6000610140828403121561226c57600080fd5b6122746120df565b61227d83612206565b815261228b60208401612206565b602082015261229c60408401612206565b60408201526122ad60608401612222565b60608201526122be60808401612222565b60808201526122cf60a08401612206565b60a08201526122e060c08401612236565b60c08201526122f160e08401612247565b60e0820152610100612304818501612236565b90820152610120612316848201612236565b908201529392505050565b600082601f83011261233257600080fd5b81356001600160401b0381111561234b5761234b6120c9565b61235e601f8201601f19166020016121d6565b81815284602083860101111561237357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156123ad57600080fd5b6123b689612206565b97506123c460208a01612206565b96506123d260408a01612206565b95506123e060608a01612222565b94506123ee60808a01612206565b93506123fc60a08a01612222565b925060c08901356001600160401b0381111561241757600080fd5b6124238b828c01612321565b92505061243260e08a01612247565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b808310156124865783518252928401926001929092019190840190612466565b509695505050505050565b6000602082840312156124a357600080fd5b5035919050565b6000815180845260005b818110156124d0576020818501810151868301820152016124b4565b818111156124e2576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061187860208301846124aa565b60008060008060008060c0878903121561252357600080fd5b61252c87612206565b955061253a60208801612206565b945061254860408801612222565b935061255660608801612206565b925061256460808801612222565b915061257260a08801612247565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156125bf5783516001600160a01b03168352928401929184019160010161259a565b50909695505050505050565b600080600080608085870312156125e157600080fd5b6125ea85612222565b93506125f860208601612247565b925061260660408601612236565b915060608501356001600160401b0381111561262157600080fd5b61262d87828801612321565b91505092959194509250565b60006001600160401b03821115612652576126526120c9565b5060051b60200190565b6000602080838503121561266f57600080fd5b82356001600160401b038082111561268657600080fd5b818501915085601f83011261269a57600080fd5b81356126ad6126a882612639565b6121d6565b81815260059190911b830184019084810190888311156126cc57600080fd5b8585015b83811015612704578035858111156126e85760008081fd5b6126f68b89838a0101612321565b8452509186019186016126d0565b5098975050505050505050565b60008060008060008060a0878903121561272a57600080fd5b61273387612222565b955061274160208801612247565b945061274f60408801612247565b935061275d60608801612236565b925060808701356001600160401b038082111561277957600080fd5b818901915089601f83011261278d57600080fd5b81358181111561279c57600080fd5b8a60208285010111156127ae57600080fd5b6020830194508093505050509295509295509295565b600082601f8301126127d557600080fd5b813560206127e56126a883612639565b82815260059290921b8401810191818101908684111561280457600080fd5b8286015b848110156124865780356001600160401b038082111561282757600080fd5b9088019060a0828b03601f1901121561283f57600080fd5b612847612108565b612852878401612236565b81526040612861818501612206565b888301526060840135818301526080840135606083015260a08401358381111561288b5760008081fd5b8085019450508b603f8501126128a357600092508283fd5b8784013592506128b56126a884612639565b83815260069390931b8401810192888101908d8511156128d55760008081fd5b948201945b8486101561292c5782868f0312156128f25760008081fd5b6128fa61212a565b61290387612222565b81528a8701358060040b81146129195760008081fd5b818c0152825294820194908901906128da565b6080840152505085525050918301918301612808565b60006080828403121561295457600080fd5b61295c61214c565b905061296782612206565b815261297560208301612236565b602082015260408201356001600160401b038082111561299457600080fd5b6129a085838601612321565b604084015260608401359150808211156129b957600080fd5b506129c684828501612321565b60608301525092915050565b600080604083850312156129e557600080fd5b82356001600160401b03808211156129fc57600080fd5b9084019060a08287031215612a1057600080fd5b612a18612108565b612a2183612206565b8152612a2f60208401612206565b6020820152612a4060408401612206565b6040820152606083013582811115612a5757600080fd5b83016101808189031215612a6a57600080fd5b612a7261216e565b612a7b82612206565b8152612a8960208301612206565b6020820152612a9a60408301612206565b6040820152612aab60608301612206565b60608201526080820135608082015260a082013560a0820152612ad060c08301612222565b60c0820152612ae160e08301612222565b60e0820152610100612af4818401612222565b90820152610120612b06838201612236565b908201526101408281013585811115612b1e57600080fd5b612b2a8b8286016127c4565b8284015250506101608083013585811115612b4457600080fd5b612b508b828601612321565b8284015250508060608401525050612b6a60808401612236565b608082015293506020850135915080821115612b8557600080fd5b50612b9285828601612942565b9150509250929050565b6020815260018060a01b03825116602082015260ff60208301511660408201526000604083015160806060840152612bd760a08401826124aa565b90506060840151601f19848303016080850152612bf482826124aa565b95945050505050565b600082601f830112612c0e57600080fd5b81356020612c1e6126a883612639565b82815260059290921b84018101918181019086841115612c3d57600080fd5b8286015b848110156124865780358352918301918301612c41565b600082601f830112612c6957600080fd5b81356020612c796126a883612639565b82815260059290921b84018101918181019086841115612c9857600080fd5b8286015b8481101561248657612cad81612206565b8352918301918301612c9c565b600082601f830112612ccb57600080fd5b81356020612cdb6126a883612639565b82815260059290921b84018101918181019086841115612cfa57600080fd5b8286015b848110156124865780356001600160401b0380821115612d1d57600080fd5b90880190601f196080838c0382011215612d3657600080fd5b612d3e61214c565b8784013583811115612d4f57600080fd5b84016060818e0384011215612d6357600080fd5b612d6b612191565b9250612d78898201612236565b83526040612d87818301612206565b8a850152606082013585811115612d9d57600080fd5b612dab8f8c83860101612bfd565b8286015250838352612dbe818701612236565b8a8401526060860135935084841115612dd657600080fd5b612de48e8b86890101612c58565b90830152506080840135915082821115612dfd57600080fd5b612e0b8c8984870101612bfd565b60608201528652505050918301918301612cfe565b600082601f830112612e3157600080fd5b81356020612e416126a883612639565b82815260059290921b84018101918181019086841115612e6057600080fd5b8286015b848110156124865780356001600160401b03811115612e835760008081fd5b612e918986838b0101612321565b845250918301918301612e64565b600082601f830112612eb057600080fd5b81356020612ec06126a883612639565b82815260059290921b84018101918181019086841115612edf57600080fd5b8286015b848110156124865780356001600160401b0380821115612f035760008081fd5b9088019060a0828b03601f1901811315612f1d5760008081fd5b612f25612108565b8784013583811115612f375760008081fd5b612f458d8a83880101612cba565b8252506040612f55818601612236565b898301526060612f66818701612206565b82840152608091508186013585811115612f805760008081fd5b612f8e8f8c838a0101612c58565b82850152505082850135925083831115612fa85760008081fd5b612fb68d8a85880101612e20565b908201528652505050918301918301612ee3565b600082601f830112612fdb57600080fd5b81356020612feb6126a883612639565b82815260059290921b8401810191818101908684111561300a57600080fd5b8286015b848110156124865761301f81612236565b835291830191830161300e565b80356001600160401b038116811461221d57600080fd5b600082601f83011261305457600080fd5b813560206130646126a883612639565b82815260059290921b8401810191818101908684111561308357600080fd5b8286015b848110156124865780356001600160401b03808211156130a75760008081fd5b90880190610160828b03601f19018113156130c25760008081fd5b6130ca6121b3565b6130d5888501612247565b815260406130e4818601612247565b8983015260606130f5818701612236565b8284015260809150613108828701612222565b9083015260a0613119868201612236565b8284015260c0915061312c828701612222565b9083015260e061313d868201612222565b82840152610100915061315182870161302c565b90830152610120858101358581111561316a5760008081fd5b6131788f8c838a0101612c58565b8385015250610140915081860135858111156131945760008081fd5b6131a28f8c838a0101612e20565b8285015250506131b3838601612206565b908201528652505050918301918301613087565b600082601f8301126131d857600080fd5b813560206131e86126a883612639565b82815260059290921b8401810191818101908684111561320757600080fd5b8286015b848110156124865780356001600160401b038082111561322b5760008081fd5b9088019060a0828b03601f19018113156132455760008081fd5b61324d612108565b613258888501612222565b81526040808501358481111561326e5760008081fd5b61327c8e8b83890101612321565b8a84015250606080860135858111156132955760008081fd5b6132a38f8c838a0101612321565b83850152506080915081860135858111156132be5760008081fd5b6132cc8f8c838a0101612321565b8285015250506132dd838601612236565b90820152865250505091830191830161320b565b6000806040838503121561330457600080fd5b61330d83612222565b915060208301356001600160401b038082111561332957600080fd5b90840190610160828703121561333e57600080fd5b6133466121b3565b82358281111561335557600080fd5b61336188828601612e9f565b82525060208301358281111561337657600080fd5b61338288828601612fca565b60208301525060408301358281111561339a57600080fd5b6133a688828601613043565b6040830152506060830135828111156133be57600080fd5b6133ca888286016131c7565b6060830152506080830135828111156133e257600080fd5b6133ee88828601612fca565b60808301525060a08301358281111561340657600080fd5b61341288828601612c58565b60a08301525060c08301358281111561342a57600080fd5b61343688828601612c58565b60c08301525061344860e08401612222565b60e082015261010061345b818501612222565b9082015261012061346d848201612236565b90820152610140838101358381111561348557600080fd5b61349189828701612321565b8284015250508093505050509250929050565b6000602082840312156134b657600080fd5b81356001600160401b03808211156134cd57600080fd5b9083019061016082860312156134e257600080fd5b6134ea6121b3565b6134f383612206565b815261350160208401612206565b602082015261351260408401612222565b604082015261352360608401612247565b606082015261353460808401612247565b608082015261354560a08401612236565b60a082015261355660c08401612206565b60c082015261356760e08401612222565b60e082015261010061357a818501612206565b9082015261012061358c848201612236565b9082015261014083810135838111156135a457600080fd5b6135b088828701612321565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561361657603f198886030184526136048583516124aa565b945092850192908501906001016135e8565b5092979650505050505050565b60006020828403121561363557600080fd5b81356001600160401b0381111561364b57600080fd5b61049184828501612c58565b60006020828403121561366957600080fd5b61187882612206565b60008060006060848603121561368757600080fd5b61369084612222565b925061369e60208501612247565b91506136ac60408501612236565b90509250925092565b600081518084526020808501945080840160005b838110156136e857815160ff16875295820195908201906001016136c9565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561376a57888303603f190185528151805187855261373e888601826136b5565b91890151858303868b015291905061375681836136b5565b96890196945050509086019060010161371a565b509098975050505050505050565b600181811c9082168061378c57607f821691505b602082108114156119fe57634e487b7160e01b600052602260045260246000fd5b6001600160a01b039687168152948616602086015263ffffffff93841660408601529190941660608401529216608082015261ffff90911660a082015260c00190565b6001600160a01b0394909416845263ffffffff92909216602084015261ffff16604083015260ff16606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561386c5761386c613839565b019392505050565b60006020828403121561388657600080fd5b5051919050565b60008282101561389f5761389f613839565b500390565b600082198211156138b7576138b7613839565b500190565b60006000198214156138d0576138d0613839565b5060010190565b600060ff821660ff8416808210156138f1576138f1613839565b90039392505050565b634e487b7160e01b600052601260045260246000fd5b60008261391f5761391f6138fa565b500490565b600081600019048311821515161561393e5761393e613839565b500290565b600181815b8085111561397e57816000190482111561396457613964613839565b8085161561397157918102915b93841c9390800290613948565b509250929050565b60008261399557506001610aea565b816139a257506000610aea565b81600181146139b857600281146139c2576139de565b6001915050610aea565b60ff8411156139d3576139d3613839565b50506001821b610aea565b5060208310610133831016604e8410600b8410161715613a01575081810a610aea565b613a0b8383613943565b8060001904821115613a1f57613a1f613839565b029392505050565b60006118788383613986565b600082613a4257613a426138fa565b50069056fea2646970667358221220c11bf4e2795ccde753df5cc76d83190eb3918f38ac91e77a957a0e3e086898d764736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
