{
  "_format": "hh-sol-artifact-1",
  "contractName": "RoundHandler",
  "sourceName": "contracts/V3/handler/RoundHandler.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "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": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "roundHandlerHelper",
      "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": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "0x608060405234801561001057600080fd5b50615627806100206000396000f3fe608060405234801561001057600080fd5b50600436106101175760003560e01c80638129fc1c116100a85780638129fc1c146101f95780638da5cb5b1461020157806395edcb0814610216578063a903620c14610236578063af84b51f14610249578063b41bd78914610269578063b4b703521461027c578063d0d35b551461028f578063da6d063a146102a2578063f2fde38b146102b5578063f2fe4fa5146102c857600080fd5b80631cc4f0411461011c5780631eda6e4f1461014557806334c76b25146101655780634b2dbcb8146101825780634b2e9b411461018257806354fd4d50146101a25780635790c294146101b657806362329cc5146101cb5780636dabaf04146101de578063715018a6146101f1575b600080fd5b61013061012a3660046137d8565b50600090565b60405190151581526020015b60405180910390f35b61015861015336600461391d565b6102d7565b60405161013c91906139ce565b6040805160208101909152600081525b60405161013c9190613a6e565b610195610190366004613a81565b610371565b60405161013c9190613af5565b60405165126ad8dcd632815260200161013c565b6101c96101c4366004613b42565b6103a3565b005b6101956101d9366004613bd3565b61072d565b6101306101ec366004613c83565b61080a565b6101c96108a5565b6101c96108e0565b610209610955565b60405161013c9190613d02565b610229610224366004613f24565b610964565b60405161013c91906140ee565b6101c961024436600461483a565b61108d565b61025c6102573660046149ed565b61110a565b60405161013c9190614b0a565b6101c9610277366004614b6c565b611267565b61013061028a3660046137d8565b611486565b61017561029d366004614ba0565b6114f9565b606754610209906001600160a01b031681565b6101c96102c3366004614be3565b611510565b606060405161013c9190614c3c565b60408051602081019091526060815260006102f88a898989898e60006115ad565b60008181526066602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561035757602002820191906000526020600020905b815481526020019060010190808311610343575b5050509190925250919d9c50505050505050505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509150505b9695505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506065816040516103db9190614cc1565b90815260405190819003602001902054336001600160a01b039091161461041d5760405162461bcd60e51b815260040161041490614cdd565b60405180910390fd5b6104586040518060400160405280601a8152602001793932b3a93ab632a3b937bab829b637ba20b933b9903132b3b4b760311b81525061161c565b6104896040518060400160405280600981526020016818db1d5cdd195c925960ba1b8152508663ffffffff1661165f565b6104bc6040518060400160405280600d81526020016c0e4ead8caa6d8dee892dcc8caf609b1b8152508561ffff1661165f565b6104e7604051806040016040528060068152602001650c4e4c2dcc6d60d31b8152508460ff1661165f565b6040805160a08101825260008082526020820181905260609282018390529181018290526080810191909152606560ff8516106106ec576105298360006116a8565b63ffffffff16815261053c8360016116a8565b63ffffffff1660808201526105528360026116a8565b63ffffffff16606082015260408051808201909152601b81527a0e4cacea4ead8ca8ee4deeae0a6d8dee882e4cee640c4e4c2dcc6d602b1b602082015261059c9060ff861661165f565b6105cc6040518060400160405280600a81526020016970657263656e7461676560b01b815250826000015161165f565b6105fe604051806040016040528060068152602001651dd95a59da1d60d21b815250826080015163ffffffff1661165f565b610632604051806040016040528060088152602001676d756c7469706c6560c01b815250826060015163ffffffff1661165f565b6040805163ffffffff8816602082015261ffff87169181019190915260ff8516606082015260009060800160408051601f19818403018152918152815160209283012084820187905260ff88169285019290925260675490516319d4366960e11b81529192506001600160a01b0316906333a86cd2906106b89084908690600401614d14565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b50505050505b610725604051806040016040528060188152602001771c9959d49d5b1951dc9bdd5c14db1bdd105c99dcc8195b9960421b81525061161c565b505050505050565b6060600082516001600160401b0381111561074a5761074a61364d565b604051908082528060200260200182016040528015610773578160200160208202803683370190505b50905060005b815181101561080357606584828151811061079657610796614d79565b60200260200101516040516107ab9190614cc1565b9081526040519081900360200190205482516001600160a01b03909116908390839081106107db576107db614d79565b6001600160a01b03909216602092830291909101909101526107fc81614da5565b9050610779565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b81525060658160405161084b9190614cc1565b90815260405190819003602001902054336001600160a01b03909116146108845760405162461bcd60e51b815260040161041490614cdd565b60ff8416610898576108988787878661170f565b5060019695505050505050565b336108ae610955565b6001600160a01b0316146108d45760405162461bcd60e51b815260040161041490614dbe565b6108de6000611b41565b565b60006108ec6001611b93565b90508015610904576000805461ff0019166101001790555b61090c611c20565b8015610952576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b8152506065816040516109b69190614cc1565b90815260405190819003602001902054336001600160a01b03909116146109ef5760405162461bcd60e51b815260040161041490614cdd565b610a2460405180604001604052806014815260200173726f756e6448616e646c65722070726f6365737360601b81525061161c565b3083526060840151600090610a3890611c4f565b9050600085606001516101000151610a538760600151611c5b565b610a608860600151611c7a565b604051602001610a7293929190614df3565b6040516020818303038152906040528051906020012090506000610aae610aa98460008a60600151611c9f9092919063ffffffff16565b611cec565b90506000610b05338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff16600014610af2578c6060015160e00151610afc565b8c6060015160c001515b8d5160006115ad565b9050610b118883611d3a565b60001960ff831601610c61576060880151600090610b3590610aa990876001611c9f565b90506000610b56610aa98760028d60600151611c9f9092919063ffffffff16565b90506000610b678b60600151611d99565b63ffffffff1690506000612710828d606001516101400151600081518110610b9157610b91614d79565b602002602001015160600151610ba79190614e15565b610bb19190614e2c565b9050610be46040518060400160405280600f81526020016e1c1c9bd8d95cdcc81c9bdd5b991259608a1b8152508561165f565b610c156040518060400160405280600f81526020016e1c1c9bd8d95cdcc819dc9bdd5c1259608a1b8152508461165f565b610c4b604051806040016040528060148152602001731c1c9bd8d95cdcc81858dd1d585b105b5bdd5b9d60621b8152508261165f565b610c5887828e8787611dd4565b50505050611055565b60011960ff831601610e2b57610c9d6040518060400160405280600f81526020016e70726f6365737320636c61696d203160881b81525061161c565b6060880151600090610cb590610aa990876001611c9f565b9050610cee604051806040016040528060158152602001741c1c9bd8d95cdcc818db185a5b481c9bdd5b991259605a1b8152508261165f565b6000806000610cfe878d86611ef0565b925092509250610d2c60405180604001604052806006815260200165185b5bdd5b9d60d21b8152508461165f565b610d5460405180604001604052806006815260200165185b5bdd5b9d60d21b8152508361165f565b610d7c604051806040016040528060068152602001650c4e4c2dcc6d60d31b8152508261165f565b600083158015610d8a575081155b8015610d94575082155b159050610dcf604051806040016040528060168152602001750383937b1b2b9b99021a6a22fa1b620a4a6903bb4b7160551b8152508261202c565b8015610e16578115610dfc57610dfc8d876001610ded866065614e4e565b610df79190614e67565b612071565b610e118d8789610e0c8789614e80565b612114565b610e21565b610e218d878961233b565b5050505050611055565b60021960ff831601610f71576060880151600090610e4f90610aa990876001611c9f565b9050610e946040518060400160405280601c81526020017f70726f6365737320434d445f57495448445241572063616c6c657220000000008152508a60000151612375565b610ed36040518060400160405280601c81526020017f70726f6365737320434d445f574954484452415720616d6f756e7420000000008152508261165f565b6067548951604051637c75693b60e11b81526000926001600160a01b03169163f8ead27691610f089189918790600401614e93565b6020604051808303816000875af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190614eb2565b905080610f59576000610f5b565b815b9150610f6a8a84600385612114565b5050611055565b60031960ff831601611022576060880151600090610f9590610aa990876001611c9f565b6067548a5160405163097942f360e01b81529293506000926001600160a01b039092169163097942f391610fd0918991908790600401614e93565b6020604051808303816000875af1158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110139190614ed4565b9050610f6a8a84600484612114565b60041960ff83160161105557606088015160009061104690610aa990876001611c9f565b9050611053848a836123ba565b505b60ff82166001148061106a575060ff82166005145b1561107a5761107a88828461233b565b5050606460208601525092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506065816040516110cc9190614cc1565b90815260405190819003602001902054336001600160a01b03909116146111055760405162461bcd60e51b815260040161041490614cdd565b505050565b6060600082604001518360600151846080015160405160200161112f93929190614df3565b60408051601f19818403018152828252805160209182012060e0840183526000808552918401829052918301819052606083018190526080830181905260a0830181905260c0830152915060e084015163ffffffff90811660a083015260608086015161ffff90811660408086019190915260808089015190921692850192909252818701519092166020808501919091528601516001600160a01b03908116845260c08701518116928401929092526067546101208701516101408801519251630db778bd60e11b81526000949290921692631b6ef17a92611219929188918890600401614f56565b600060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261125e9190810190614fb9565b95945050505050565b33611270610955565b6001600160a01b0316146112965760405162461bcd60e51b815260040161041490614dbe565b6112ca60405180604001604052806013815260200172736574456e67696e65417265614c697374203160681b81525061161c565b6112d3816124e2565b6113076040518060400160405280601381526020017239b2ba22b733b4b732a0b932b0a634b9ba101960691b81525061161c565b60408051808201825260148152732927aaa7222fa420a7222622a92fa422a62822a960611b6020820152905160659161133f91614cc1565b90815260408051918290036020908101832054606780546001600160a01b0319166001600160a01b039092169190911790558282019091526013825272736574456e67696e65417265614c697374203360681b9082015261139f9061161c565b6000606560405180604001604052806013815260200172524f554e445f48414e444c45525f535441544560681b8152506040516113dc9190614cc1565b9081526040805191829003602090810183205483830190925260138352721cd95d115b99da5b99505c9958531a5cdd080d606a1b908301526001600160a01b031691506114289061161c565b60675460405163615e9aa960e11b81526001600160a01b039091169063c2bd355290611458908490600401613d02565b600060405180830381600087803b15801561147257600080fd5b505af1158015610725573d6000803e3d6000fd5b600060405180604001604052806006815260200165456e67696e6560d01b8152506065816040516114b79190614cc1565b90815260405190819003602001902054336001600160a01b03909116146114f05760405162461bcd60e51b815260040161041490614cdd565b50600092915050565b6040805160208101909152600081525b9392505050565b33611519610955565b6001600160a01b03161461153f5760405162461bcd60e51b815260040161041490614dbe565b6001600160a01b0381166115a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610414565b61095281611b41565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b610952816040516024016116309190613a6e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052612604565b6116a48282604051602401611675929190615071565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052612604565b5050565b6000806116bc6116b78561260d565b612633565b90506117056116e6828560ff16815181106116d9576116d9614d79565b6020026020010151612633565b6002815181106116f8576116f8614d79565b6020026020010151611cec565b9150505b92915050565b600061171a8261273c565b9050600085858560405160200161173393929190614df3565b6040516020818303038152906040528051906020012090506117fb604051806102600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160a01b031681525090565b61180361274c565b60208201524260408201526118198460006116a8565b81526118268460016116a8565b60c08201526118368460026116a8565b60e08201526118468460036116a8565b6101008201526118578460046116a8565b6101408201526118688460056116a8565b60808201526118788460066116a8565b60608201526118888460076116a8565b60ff1661018082015261189c8460086116a8565b60ff166101a08201526118b08460096116a8565b60ff166101c08201526118c484600a6116a8565b60ff166101e08201526118d884600b6116a8565b60ff1661020082015260006118ee85600c6127c9565b90506118fb85600d6116a8565b61012083015261190c85600e6116a8565b60ff1661022083015280516000906001600160401b038111156119315761193161364d565b60405190808252806020026020018201604052801561198357816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161194f5790505b5090506000805b8351811015611a8b57600061199f8583612808565b90506119d6604051806040016040528060128152602001710e4c2dcc8deda92e8cadae640d8cadccee8d60731b815250825161165f565b6119e1816000612825565b8483815181106119f3576119f3614d79565b60209081029190910101516001600160a01b039091169052611a16816001612861565b848381518110611a2857611a28614d79565b60200260200101516020019063ffffffff16908163ffffffff1681525050838281518110611a5857611a58614d79565b60200260200101516020015163ffffffff1683611a759190614e80565b9250508080611a8390614da5565b91505061198a565b506127108110611acf5760405162461bcd60e51b815260206004820152600f60248201526e666565546f74616c206572726f722160881b6044820152606401610414565b606754604051635d6e66bf60e11b81526001600160a01b039091169063badccd7e90611b03908890889087906004016150f2565b600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b5050505050505050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611bda578160ff166001148015611bb65750303b155b611bd25760405162461bcd60e51b815260040161041490615233565b506000919050565b60005460ff808416911610611c015760405162461bcd60e51b815260040161041490615233565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff16611c475760405162461bcd60e51b815260040161041490615281565b6108de61287e565b606061170982306128ae565b60006117098260a00151601060006008611c759190614e80565b612953565b60006117098260a00151601060006008611c949190614e80565b611c75906010614e80565b611ca761354a565b611cc983611cb6846001614e4e565b60ff16815181106116d9576116d9614d79565b600281518110611cdb57611cdb614d79565b602002602001015190509392505050565b805160009015801590611d0157508151602110155b611d0a57600080fd5b600080611d1684612972565b815191935091506020821015611d325760208290036101000a90045b949350505050565b6000611d4983606001516129b9565b90508160ff168160ff16146111055760405162461bcd60e51b81526020600482015260166024820152752fb1b432b1b5a1a6a210313930b731b41032b93937b960511b6044820152606401610414565b60006117098260a00151602060006008611db39190614e80565b611dbe906010614e80565b611dc9906010614e80565b611c94906008614e80565b606760009054906101000a90046001600160a01b03166001600160a01b03166360c07fdc868484886040518060e001604052808a60600151602001516001600160a01b031681526020018a60600151610100015163ffffffff168152602001611e408b60600151611c5b565b61ffff168152602001611e568b60600151611c7a565b61ffff1681526020018a602001516001600160a01b031681526020018a6060015160c0015163ffffffff1681526020018a600001516001600160a01b03168152506040518663ffffffff1660e01b8152600401611eb79594939291906152cc565b600060405180830381600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050505050505050565b6000806000606760009054906101000a90046001600160a01b03166001600160a01b0316634e4a539f878688600001516040518060e001604052808b60600151602001516001600160a01b031681526020018b60600151610100015163ffffffff168152602001611f648c60600151611c5b565b61ffff168152602001611f7a8c60600151611c7a565b61ffff1681526020018b602001516001600160a01b031681526020018b6060015160c0015163ffffffff1681526020018b600001516001600160a01b03168152506040518563ffffffff1660e01b8152600401611fda94939291906152f7565b6060604051808303816000875af1158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d9190615322565b92509250925093509350939050565b6116a48282604051602401612042929190615350565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b179052612604565b6120a5604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525061161c565b60006120af6129de565b90506120c76040518060200160405280606081525090565b600160608301526002825260ff831660408301526120e58183612a25565b600084815260666020908152604090912082518051849361210a928492910190613564565b5050505050505050565b612148604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525061161c565b60006121526129de565b905061216a6040518060200160405280606081525090565b6001606083015260ff8416600214612183576004612186565b60025b60ff90811683528416600214801561219c575082155b156121a8575050612335565b6040805160018082528183019092529060208083019080368337505050610160830181905280518491906000906121e1576121e1614d79565b602090810291909101015260016101208301526065604083015260031960ff85160161220f57600260408301525b60021960ff85160161222357600160408301525b61222d8183612a25565b61225360405180606001604052806023815260200161549360239139835160ff1661165f565b61227d6040518060600160405280602581526020016154406025913983610120015160ff1661165f565b6122be6040518060600160405280602181526020016154ff602191398361016001516000815181106122b1576122b1614d79565b602002602001015161165f565b6122e76040518060600160405280602481526020016154db60249139836040015160ff1661165f565b6123106040518060c00160405280608e8152602001615520608e9139836060015160ff1661165f565b6000858152606660209081526040909120825180518493611ee5928492910190613564565b50505050565b60006123456129de565b905061235d6040518060200160405280606081525090565b60006040830152600160208301526120e58183612a25565b6116a4828260405160240161238b929190615374565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612604565b606760009054906101000a90046001600160a01b03166001600160a01b0316636e8580b2848460000151846040518060e001604052808860600151602001516001600160a01b031681526020018860600151610100015163ffffffff1681526020016124298960600151611c5b565b61ffff16815260200161243f8960600151611c7a565b61ffff16815260200188602001516001600160a01b03168152602001886060015160c0015163ffffffff16815260200188600001516001600160a01b03168152506040518563ffffffff1660e01b815260040161249f949392919061539e565b6020604051808303816000875af11580156124be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123359190614ed4565b336124eb610955565b6001600160a01b0316146125115760405162461bcd60e51b815260040161041490614dbe565b60005b81518110156116a45781818151811061252f5761252f614d79565b6020026020010151606583838151811061254b5761254b614d79565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015612590573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125b891908101906153c9565b6040516125c59190614cc1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556125fd81614da5565b9050612514565b61095281613024565b61261561354a565b50604080518082019091528151815260209182019181019190915290565b606061263e82613045565b61264757600080fd5b600061265283613080565b90506000816001600160401b0381111561266e5761266e61364d565b6040519080825280602002602001820160405280156126a757816020015b61269461354a565b81526020019060019003908161268c5790505b50905060006126b98560200151613105565b85602001516126c89190614e80565b90506000805b84811015612731576126df83613180565b915060405180604001604052808381526020018481525084828151811061270857612708614d79565b602090810291909101015261271d8284614e80565b92508061272981614da5565b9150506126ce565b509195945050505050565b606060006115096116b78461260d565b60004661a4b18190036127c25760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bc9190614ed4565b91505090565b4391505090565b606060006127d96116b78561260d565b90506117056127f6828560ff16815181106116d9576116d9614d79565b6002815181106116d9576116d9614d79565b60606115096127f6848460ff16815181106116d9576116d9614d79565b6000611509612842848460ff16815181106116d9576116d9614d79565b60028151811061285457612854614d79565b6020026020010151613224565b60006115096116e6848460ff16815181106116d9576116d9614d79565b600054610100900460ff166128a55760405162461bcd60e51b815260040161041490615281565b6108de33611b41565b606060006128c36116b785610160015161260d565b905060005b81518110156129485760006128fd6128eb8484815181106116d9576116d9614d79565b60008151811061285457612854614d79565b9050846001600160a01b0316816001600160a01b0316036129375761292d8383815181106116d9576116d9614d79565b9350505050611709565b5061294181614da5565b90506128c8565b506060949350505050565b91821c91600080612967600180861b615411565b909416949350505050565b60008060006129848460200151613105565b905060008185602001516129989190614e80565b905060008286600001516129ac9190615411565b9196919550909350505050565b60006117098260a001516008600060086129d39190614e80565b611c94906010614e80565b6129e66135af565b6129ee6135af565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015612a405780612a3c81614da5565b9150505b8160e0015161271014612a5b5780612a5781614da5565b9150505b81610100015161271014612a775780612a7381614da5565b9150505b61014082015151151580612a9057506101608201515115155b80612aa057506101a08201515115155b15612b12576000826101600151518361014001515111612ae557826101a00151518361016001515111612ad957826101a0015151612aed565b82610160015151612aed565b826101400151515b9050612afa816004614e15565b612b049083614e80565b60ff90911661012084015290505b612b3c6040518060600160405280602e8152602001615465602e913983610120015160ff1661165f565b806001600160401b03811115612b5457612b5461364d565b604051908082528060200260200182016040528015612b7d578160200160208202803683370190505b5083528151612b8d90849061323e565b612b9b838360200151613296565b612ba98383606001516132d7565b612bb7838360400151613326565b612bc68383610120015161336a565b612be76040518060600160405280602581526020016154b66025913961161c565b60008060019050836080015162ffffff1661271014612c1c57612c0e8585608001516133fb565b612c19600183615424565b91505b8360a0015163ffffffff1661271014612c4b57612c3d858560a00151613462565b612c48600283615424565b91505b60c084015115612c915760c0840151855182612c6681614da5565b935081518110612c7857612c78614d79565b6020908102919091010152612c8e600483615424565b91505b8360e0015161271014612cda5760e0840151855182612caf81614da5565b935081518110612cc157612cc1614d79565b6020908102919091010152612cd7600883615424565b91505b83610100015161271014612d2557610100840151855182612cfa81614da5565b935081518110612d0c57612d0c614d79565b6020908102919091010152612d22601083615424565b91505b61012084015160ff16156130135760005b84610120015160ff16811015612fe157600085610140015151118015612d6157508461014001515181105b15612db8578461014001518181518110612d7d57612d7d614d79565b602002602001015186600001518380612d9590614da5565b945081518110612da757612da7614d79565b602002602001018181525050612de6565b855160009083612dc781614da5565b945081518110612dd957612dd9614d79565b6020026020010181815250505b600085610160015151118015612e0157508461016001515181105b15612e58578461016001518181518110612e1d57612e1d614d79565b602002602001015186600001518380612e3590614da5565b945081518110612e4757612e47614d79565b602002602001018181525050612e86565b855160009083612e6781614da5565b945081518110612e7957612e79614d79565b6020026020010181815250505b600085610180015151118015612ea157508461018001515181105b15612efb578461018001518181518110612ebd57612ebd614d79565b602002602001015160ff1686600001518380612ed890614da5565b945081518110612eea57612eea614d79565b602002602001018181525050612f28565b8551819083612f0981614da5565b945081518110612f1b57612f1b614d79565b6020026020010181815250505b6000856101a0015151118015612f435750846101a001515181105b15612fa357846101a001518181518110612f5f57612f5f614d79565b60200260200101516001600160a01b031686600001518380612f8090614da5565b945081518110612f9257612f92614d79565b602002602001018181525050612fd1565b855160009083612fb281614da5565b945081518110612fc457612fc4614d79565b6020026020010181815250505b612fda81614da5565b9050612d36565b50612fed602083615424565b91506130136040518060800160405280604481526020016155ae6044913986515161165f565b61301d85836134d5565b5050505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b8051600090810361305857506000919050565b6020820151805160001a9060c0821015613076575060009392505050565b5060019392505050565b8051600090810361309357506000919050565b6000806130a38460200151613105565b84602001516130b29190614e80565b90506000846000015185602001516130ca9190614e80565b90505b808210156130fc576130de82613180565b6130e89083614e80565b9150826130f481614da5565b9350506130cd565b50909392505050565b8051600090811a608081101561311e5750600092915050565b60b8811080613139575060c08110801590613139575060f881105b156131475750600192915050565b60c08110156131745761315c600160b8614e67565b6131699060ff1682615411565b611509906001614e80565b61315c600160f8614e67565b80516000908190811a608081101561319b5760019150610803565b60b88110156131c1576131af608082615411565b6131ba906001614e80565b9150610803565b60c08110156131ee5760b78103600185019450806020036101000a85510460018201810193505050610803565b60f8811015613202576131af60c082615411565b60019390930151602084900360f7016101000a900490920160f5190192915050565b805160009060151461323557600080fd5b61170982611cec565b613273826000015160008151811061325857613258614d79565b60200260200101518260ff16600860ff16600060ff16613525565b8251805160009061328657613286614d79565b6020026020010181815250505050565b61327382600001516000815181106132b0576132b0614d79565b60200260200101518260ff16600460ff16600060086132cf9190614e4e565b60ff16613525565b61327382600001516000815181106132f1576132f1614d79565b60200260200101518260ff16600460ff16600060086133109190614e4e565b61331b906004614e4e565b6132cf906008614e4e565b613273826000015160008151811061334057613340614d79565b60200260200101518260ff16600860ff166000600861335f9190614e4e565b6132cf906004614e4e565b613273826000015160008151811061338457613384614d79565b60200260200101518260ff16600860ff16600060086133a39190614e4e565b6133ae906004614e4e565b6133b9906008614e4e565b6133c4906004614e4e565b6133cf906010614e4e565b6133da906018614e4e565b6133e5906020614e4e565b6133f0906020614e4e565b6132cf906020614e4e565b613273826000015160008151811061341557613415614d79565b60200260200101518262ffffff16601860ff16600060086134369190614e4e565b613441906004614e4e565b61344c906008614e4e565b613457906004614e4e565b6132cf906010614e4e565b613273826000015160008151811061347c5761347c614d79565b60200260200101518263ffffffff16602060ff166000600861349e9190614e4e565b6134a9906004614e4e565b6134b4906008614e4e565b6134bf906004614e4e565b6134ca906010614e4e565b6132cf906018614e4e565b61327382600001516000815181106134ef576134ef614d79565b60200260200101518261ffff16601060ff166000600861350f9190614e4e565b61351a906004614e4e565b61335f906008614e4e565b600083821b8183613539600180881b615411565b901b19969096161795945050505050565b604051806040016040528060008152602001600081525090565b82805482825590600052602060002090810192821561359f579160200282015b8281111561359f578251825591602001919060010190613584565b506135ab929150613638565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b808211156135ab5760008155600101613639565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b03811182821017156136865761368661364d565b60405290565b60405160a081016001600160401b03811182821017156136865761368661364d565b604080519081016001600160401b03811182821017156136865761368661364d565b604051608081016001600160401b03811182821017156136865761368661364d565b60405161018081016001600160401b03811182821017156136865761368661364d565b604051606081016001600160401b03811182821017156136865761368661364d565b60405161016081016001600160401b03811182821017156136865761368661364d565b604051601f8201601f191681016001600160401b03811182821017156137825761378261364d565b604052919050565b80356001600160a01b0381168114611c1b57600080fd5b803563ffffffff81168114611c1b57600080fd5b803560ff81168114611c1b57600080fd5b803561ffff81168114611c1b57600080fd5b600061014082840312156137eb57600080fd5b6137f3613663565b6137fc8361378a565b815261380a6020840161378a565b602082015261381b6040840161378a565b604082015261382c606084016137a1565b606082015261383d608084016137a1565b608082015261384e60a0840161378a565b60a082015261385f60c084016137b5565b60c082015261387060e084016137c6565b60e08201526101006138838185016137b5565b908201526101206138958482016137b5565b908201529392505050565b60006001600160401b038211156138b9576138b961364d565b50601f01601f191660200190565b600082601f8301126138d857600080fd5b81356138eb6138e6826138a0565b61375a565b81815284602083860101111561390057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561393a57600080fd5b6139438961378a565b975061395160208a0161378a565b965061395f60408a0161378a565b955061396d60608a016137a1565b945061397b60808a0161378a565b935061398960a08a016137a1565b925060c08901356001600160401b038111156139a457600080fd5b6139b08b828c016138c7565b9250506139bf60e08a016137c6565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613a1357835182529284019260019290920191908401906139f3565b509695505050505050565b60005b83811015613a39578181015183820152602001613a21565b50506000910152565b60008151808452613a5a816020860160208601613a1e565b601f01601f19169290920160200192915050565b6020815260006115096020830184613a42565b60008060008060008060c08789031215613a9a57600080fd5b613aa38761378a565b9550613ab16020880161378a565b9450613abf604088016137a1565b9350613acd6060880161378a565b9250613adb608088016137a1565b9150613ae960a088016137c6565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015613b365783516001600160a01b031683529284019291840191600101613b11565b50909695505050505050565b60008060008060808587031215613b5857600080fd5b613b61856137a1565b9350613b6f602086016137c6565b9250613b7d604086016137b5565b915060608501356001600160401b03811115613b9857600080fd5b613ba4878288016138c7565b91505092959194509250565b60006001600160401b03821115613bc957613bc961364d565b5060051b60200190565b60006020808385031215613be657600080fd5b82356001600160401b0380821115613bfd57600080fd5b818501915085601f830112613c1157600080fd5b8135613c1f6138e682613bb0565b81815260059190911b83018401908481019088831115613c3e57600080fd5b8585015b83811015613c7657803585811115613c5a5760008081fd5b613c688b89838a01016138c7565b845250918601918601613c42565b5098975050505050505050565b600080600080600060a08688031215613c9b57600080fd5b613ca4866137a1565b9450613cb2602087016137c6565b9350613cc0604087016137c6565b9250613cce606087016137b5565b915060808601356001600160401b03811115613ce957600080fd5b613cf5888289016138c7565b9150509295509295909350565b6001600160a01b0391909116815260200190565b600082601f830112613d2757600080fd5b81356020613d376138e683613bb0565b82815260059290921b84018101918181019086841115613d5657600080fd5b8286015b84811015613a135780356001600160401b0380821115613d7957600080fd5b9088019060a0828b03601f19011215613d9157600080fd5b613d9961368c565b613da48784016137b5565b81526040613db381850161378a565b888301526060840135818301526080840135606083015260a084013583811115613ddd5760008081fd5b8085019450508b603f850112613df557600092508283fd5b878401359250613e076138e684613bb0565b83815260069390931b8401810192888101908d851115613e275760008081fd5b948201945b84861015613e7e5782868f031215613e445760008081fd5b613e4c6136ae565b613e55876137a1565b81528a8701358060040b8114613e6b5760008081fd5b818c015282529482019490890190613e2c565b6080840152505085525050918301918301613d5a565b600060808284031215613ea657600080fd5b613eae6136d0565b9050613eb98261378a565b8152613ec7602083016137b5565b602082015260408201356001600160401b0380821115613ee657600080fd5b613ef2858386016138c7565b60408401526060840135915080821115613f0b57600080fd5b50613f18848285016138c7565b60608301525092915050565b60008060408385031215613f3757600080fd5b82356001600160401b0380821115613f4e57600080fd5b9084019060a08287031215613f6257600080fd5b613f6a61368c565b613f738361378a565b8152613f816020840161378a565b6020820152613f926040840161378a565b6040820152606083013582811115613fa957600080fd5b83016101808189031215613fbc57600080fd5b613fc46136f2565b613fcd8261378a565b8152613fdb6020830161378a565b6020820152613fec6040830161378a565b6040820152613ffd6060830161378a565b60608201526080820135608082015260a082013560a082015261402260c083016137a1565b60c082015261403360e083016137a1565b60e08201526101006140468184016137a1565b908201526101206140588382016137b5565b90820152610140828101358581111561407057600080fd5b61407c8b828601613d16565b828401525050610160808301358581111561409657600080fd5b6140a28b8286016138c7565b82840152505080606084015250506140bc608084016137b5565b6080820152935060208501359150808211156140d757600080fd5b506140e485828601613e94565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261412960a0840182613a42565b90506060840151601f1984830301608085015261125e8282613a42565b600082601f83011261415757600080fd5b813560206141676138e683613bb0565b82815260059290921b8401810191818101908684111561418657600080fd5b8286015b84811015613a13578035835291830191830161418a565b600082601f8301126141b257600080fd5b813560206141c26138e683613bb0565b82815260059290921b840181019181810190868411156141e157600080fd5b8286015b84811015613a13576141f68161378a565b83529183019183016141e5565b600082601f83011261421457600080fd5b813560206142246138e683613bb0565b82815260059290921b8401810191818101908684111561424357600080fd5b8286015b84811015613a135780356001600160401b038082111561426657600080fd5b90880190601f196080838c038201121561427f57600080fd5b6142876136d0565b878401358381111561429857600080fd5b84016060818e03840112156142ac57600080fd5b6142b4613715565b92506142c18982016137b5565b835260406142d081830161378a565b8a8501526060820135858111156142e657600080fd5b6142f48f8c83860101614146565b82860152508383526143078187016137b5565b8a840152606086013593508484111561431f57600080fd5b61432d8e8b868901016141a1565b9083015250608084013591508282111561434657600080fd5b6143548c8984870101614146565b60608201528652505050918301918301614247565b600082601f83011261437a57600080fd5b8135602061438a6138e683613bb0565b82815260059290921b840181019181810190868411156143a957600080fd5b8286015b84811015613a135780356001600160401b038111156143cc5760008081fd5b6143da8986838b01016138c7565b8452509183019183016143ad565b600082601f8301126143f957600080fd5b813560206144096138e683613bb0565b82815260059290921b8401810191818101908684111561442857600080fd5b8286015b84811015613a135780356001600160401b038082111561444c5760008081fd5b9088019060a0828b03601f19018113156144665760008081fd5b61446e61368c565b87840135838111156144805760008081fd5b61448e8d8a83880101614203565b825250604061449e8186016137b5565b8983015260606144af81870161378a565b828401526080915081860135858111156144c95760008081fd5b6144d78f8c838a01016141a1565b828501525050828501359250838311156144f15760008081fd5b6144ff8d8a85880101614369565b90820152865250505091830191830161442c565b600082601f83011261452457600080fd5b813560206145346138e683613bb0565b82815260059290921b8401810191818101908684111561455357600080fd5b8286015b84811015613a1357614568816137b5565b8352918301918301614557565b80356001600160401b0381168114611c1b57600080fd5b600082601f83011261459d57600080fd5b813560206145ad6138e683613bb0565b82815260059290921b840181019181810190868411156145cc57600080fd5b8286015b84811015613a135780356001600160401b03808211156145f05760008081fd5b90880190610160828b03601f190181131561460b5760008081fd5b614613613737565b61461e8885016137c6565b8152604061462d8186016137c6565b89830152606061463e8187016137b5565b82840152608091506146518287016137a1565b9083015260a06146628682016137b5565b8284015260c091506146758287016137a1565b9083015260e06146868682016137a1565b82840152610100915061469a828701614575565b9083015261012085810135858111156146b35760008081fd5b6146c18f8c838a01016141a1565b8385015250610140915081860135858111156146dd5760008081fd5b6146eb8f8c838a0101614369565b8285015250506146fc83860161378a565b9082015286525050509183019183016145d0565b600082601f83011261472157600080fd5b813560206147316138e683613bb0565b82815260059290921b8401810191818101908684111561475057600080fd5b8286015b84811015613a135780356001600160401b03808211156147745760008081fd5b9088019060a0828b03601f190181131561478e5760008081fd5b61479661368c565b6147a18885016137a1565b8152604080850135848111156147b75760008081fd5b6147c58e8b838901016138c7565b8a84015250606080860135858111156147de5760008081fd5b6147ec8f8c838a01016138c7565b83850152506080915081860135858111156148075760008081fd5b6148158f8c838a01016138c7565b8285015250506148268386016137b5565b908201528652505050918301918301614754565b6000806040838503121561484d57600080fd5b614856836137a1565b915060208301356001600160401b038082111561487257600080fd5b90840190610160828703121561488757600080fd5b61488f613737565b82358281111561489e57600080fd5b6148aa888286016143e8565b8252506020830135828111156148bf57600080fd5b6148cb88828601614513565b6020830152506040830135828111156148e357600080fd5b6148ef8882860161458c565b60408301525060608301358281111561490757600080fd5b61491388828601614710565b60608301525060808301358281111561492b57600080fd5b61493788828601614513565b60808301525060a08301358281111561494f57600080fd5b61495b888286016141a1565b60a08301525060c08301358281111561497357600080fd5b61497f888286016141a1565b60c08301525061499160e084016137a1565b60e08201526101006149a48185016137a1565b908201526101206149b68482016137b5565b9082015261014083810135838111156149ce57600080fd5b6149da898287016138c7565b8284015250508093505050509250929050565b6000602082840312156149ff57600080fd5b81356001600160401b0380821115614a1657600080fd5b908301906101608286031215614a2b57600080fd5b614a33613737565b614a3c8361378a565b8152614a4a6020840161378a565b6020820152614a5b604084016137a1565b6040820152614a6c606084016137c6565b6060820152614a7d608084016137c6565b6080820152614a8e60a084016137b5565b60a0820152614a9f60c0840161378a565b60c0820152614ab060e084016137a1565b60e0820152610100614ac381850161378a565b90820152610120614ad58482016137b5565b908201526101408381013583811115614aed57600080fd5b614af9888287016138c7565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614b5f57603f19888603018452614b4d858351613a42565b94509285019290850190600101614b31565b5092979650505050505050565b600060208284031215614b7e57600080fd5b81356001600160401b03811115614b9457600080fd5b611705848285016141a1565b600080600060608486031215614bb557600080fd5b614bbe846137a1565b9250614bcc602085016137c6565b9150614bda604085016137b5565b90509250925092565b600060208284031215614bf557600080fd5b6115098261378a565b600081518084526020808501945080840160005b83811015614c3157815160ff1687529582019590820190600101614c12565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614cb357888303603f1901855281518051878552614c8788860182614bfe565b91890151858303868b0152919050614c9f8183614bfe565b968901969450505090860190600101614c63565b509098975050505050505050565b60008251614cd3818460208701613a1e565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b828152604060208201528151604082015260ff60208301511660608201526000604083015160a06080840152614d4d60e0840182613a42565b606085015163ffffffff90811660a086015260809095015190941660c090930192909252509092915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614db757614db7614d8f565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b808202811582820484141761170957611709614d8f565b600082614e4957634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561170957611709614d8f565b60ff828116828216039081111561170957611709614d8f565b8082018082111561170957611709614d8f565b9283526001600160a01b03919091166020830152604082015260600190565b600060208284031215614ec457600080fd5b8151801515811461150957600080fd5b600060208284031215614ee657600080fd5b5051919050565b60018060a01b03808251168352602082015163ffffffff80821660208601526040840151915061ffff8083166040870152806060860151166060870152508260808501511660808601528060a08501511660a086015250508060c08301511660c0840152505050565b600061014060ff87168352856020840152806040840152614f7981840186613a42565b91505061125e6060830184614eed565b6000614f976138e6846138a0565b9050828152838383011115614fab57600080fd5b611509836020830184613a1e565b60006020808385031215614fcc57600080fd5b82516001600160401b0380821115614fe357600080fd5b818501915085601f830112614ff757600080fd5b81516150056138e682613bb0565b81815260059190911b8301840190848101908883111561502457600080fd5b8585015b83811015613c76578051858111156150405760008081fd5b8601603f81018b136150525760008081fd5b6150638b8983015160408401614f89565b845250918601918601615028565b6040815260006150846040830185613a42565b90508260208301529392505050565b600081518084526020808501945080840160005b83811015614c3157815180516001600160a01b031688528381015163ffffffff16848901526040808201519089015260609081015190880152608090960195908201906001016150a7565b60006102a085835284516020840152602085015160408401526040850151606084015260608501516080840152608085015160a084015260a085015160c084015260c085015160e084015260e08501516101008181860152808701519150506101208181860152808701519150506101408181860152808701519150506101608181860152808701519150506101808181860152808701519150506101a061519e8186018360ff169052565b86015190506101c06151b48582018360ff169052565b86015190506101e06151ca8582018360ff169052565b86015190506102006151e08582018360ff169052565b86015190506102206151f68582018360ff169052565b860151905061024061520c8582018360ff169052565b8601516001600160a01b031661026085015250610280830181905261039981840185615093565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000610160820190508682528560208301528460408301528360608301526103996080830184614eed565b848152602081018490526001600160a01b0383166040820152610140810161125e6060830184614eed565b60008060006060848603121561533757600080fd5b8351925060208401519150604084015190509250925092565b6040815260006153636040830185613a42565b905082151560208301529392505050565b6040815260006153876040830185613a42565b905060018060a01b03831660208301529392505050565b8481526001600160a01b038416602082015260408101839052610140810161125e6060830184614eed565b6000602082840312156153db57600080fd5b81516001600160401b038111156153f157600080fd5b8201601f8101841361540257600080fd5b61170584825160208401614f89565b8181038181111561170957611709614d8f565b61ffff81811683821601908082111561080357610803614d8f56fe726f756e6448616e646c6572205f70726f63657373436c61696d20746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e74726f756e6448616e646c6572205f70726f63657373436c61696d20696e4272616e63682d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d732031726f756e6448616e646c6572205f70726f63657373436c61696d206f75744272616e6368726f756e6448616e646c6572205f70726f63657373436c61696d20616d6f756e74726f756e6448616e646c6572205f70726f63657373436c612d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d696d20706172616d732e6f75744272616e636850726f636573732d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a2646970667358221220d826e5ebdbf12394dd1642658b628f9b9e857f856c73db33110da2f026d2ca2d64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101175760003560e01c80638129fc1c116100a85780638129fc1c146101f95780638da5cb5b1461020157806395edcb0814610216578063a903620c14610236578063af84b51f14610249578063b41bd78914610269578063b4b703521461027c578063d0d35b551461028f578063da6d063a146102a2578063f2fde38b146102b5578063f2fe4fa5146102c857600080fd5b80631cc4f0411461011c5780631eda6e4f1461014557806334c76b25146101655780634b2dbcb8146101825780634b2e9b411461018257806354fd4d50146101a25780635790c294146101b657806362329cc5146101cb5780636dabaf04146101de578063715018a6146101f1575b600080fd5b61013061012a3660046137d8565b50600090565b60405190151581526020015b60405180910390f35b61015861015336600461391d565b6102d7565b60405161013c91906139ce565b6040805160208101909152600081525b60405161013c9190613a6e565b610195610190366004613a81565b610371565b60405161013c9190613af5565b60405165126ad8dcd632815260200161013c565b6101c96101c4366004613b42565b6103a3565b005b6101956101d9366004613bd3565b61072d565b6101306101ec366004613c83565b61080a565b6101c96108a5565b6101c96108e0565b610209610955565b60405161013c9190613d02565b610229610224366004613f24565b610964565b60405161013c91906140ee565b6101c961024436600461483a565b61108d565b61025c6102573660046149ed565b61110a565b60405161013c9190614b0a565b6101c9610277366004614b6c565b611267565b61013061028a3660046137d8565b611486565b61017561029d366004614ba0565b6114f9565b606754610209906001600160a01b031681565b6101c96102c3366004614be3565b611510565b606060405161013c9190614c3c565b60408051602081019091526060815260006102f88a898989898e60006115ad565b60008181526066602090815260408083208151815480850282018401845293810184815295965093949092849284919084018282801561035757602002820191906000526020600020905b815481526020019060010190808311610343575b5050509190925250919d9c50505050505050505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509150505b9695505050505050565b6040518060400160405280600f81526020016e436c757374657252756c654172656160881b8152506065816040516103db9190614cc1565b90815260405190819003602001902054336001600160a01b039091161461041d5760405162461bcd60e51b815260040161041490614cdd565b60405180910390fd5b6104586040518060400160405280601a8152602001793932b3a93ab632a3b937bab829b637ba20b933b9903132b3b4b760311b81525061161c565b6104896040518060400160405280600981526020016818db1d5cdd195c925960ba1b8152508663ffffffff1661165f565b6104bc6040518060400160405280600d81526020016c0e4ead8caa6d8dee892dcc8caf609b1b8152508561ffff1661165f565b6104e7604051806040016040528060068152602001650c4e4c2dcc6d60d31b8152508460ff1661165f565b6040805160a08101825260008082526020820181905260609282018390529181018290526080810191909152606560ff8516106106ec576105298360006116a8565b63ffffffff16815261053c8360016116a8565b63ffffffff1660808201526105528360026116a8565b63ffffffff16606082015260408051808201909152601b81527a0e4cacea4ead8ca8ee4deeae0a6d8dee882e4cee640c4e4c2dcc6d602b1b602082015261059c9060ff861661165f565b6105cc6040518060400160405280600a81526020016970657263656e7461676560b01b815250826000015161165f565b6105fe604051806040016040528060068152602001651dd95a59da1d60d21b815250826080015163ffffffff1661165f565b610632604051806040016040528060088152602001676d756c7469706c6560c01b815250826060015163ffffffff1661165f565b6040805163ffffffff8816602082015261ffff87169181019190915260ff8516606082015260009060800160408051601f19818403018152918152815160209283012084820187905260ff88169285019290925260675490516319d4366960e11b81529192506001600160a01b0316906333a86cd2906106b89084908690600401614d14565b600060405180830381600087803b1580156106d257600080fd5b505af11580156106e6573d6000803e3d6000fd5b50505050505b610725604051806040016040528060188152602001771c9959d49d5b1951dc9bdd5c14db1bdd105c99dcc8195b9960421b81525061161c565b505050505050565b6060600082516001600160401b0381111561074a5761074a61364d565b604051908082528060200260200182016040528015610773578160200160208202803683370190505b50905060005b815181101561080357606584828151811061079657610796614d79565b60200260200101516040516107ab9190614cc1565b9081526040519081900360200190205482516001600160a01b03909116908390839081106107db576107db614d79565b6001600160a01b03909216602092830291909101909101526107fc81614da5565b9050610779565b5092915050565b60006040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b81525060658160405161084b9190614cc1565b90815260405190819003602001902054336001600160a01b03909116146108845760405162461bcd60e51b815260040161041490614cdd565b60ff8416610898576108988787878661170f565b5060019695505050505050565b336108ae610955565b6001600160a01b0316146108d45760405162461bcd60e51b815260040161041490614dbe565b6108de6000611b41565b565b60006108ec6001611b93565b90508015610904576000805461ff0019166101001790555b61090c611c20565b8015610952576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6033546001600160a01b031690565b604080516080810182526000808252602082015260609181018290528181019190915260405180604001604052806006815260200165456e67696e6560d01b8152506065816040516109b69190614cc1565b90815260405190819003602001902054336001600160a01b03909116146109ef5760405162461bcd60e51b815260040161041490614cdd565b610a2460405180604001604052806014815260200173726f756e6448616e646c65722070726f6365737360601b81525061161c565b3083526060840151600090610a3890611c4f565b9050600085606001516101000151610a538760600151611c5b565b610a608860600151611c7a565b604051602001610a7293929190614df3565b6040516020818303038152906040528051906020012090506000610aae610aa98460008a60600151611c9f9092919063ffffffff16565b611cec565b90506000610b05338960600151602001518a6060015161010001518b602001518c6060015160e0015163ffffffff16600014610af2578c6060015160e00151610afc565b8c6060015160c001515b8d5160006115ad565b9050610b118883611d3a565b60001960ff831601610c61576060880151600090610b3590610aa990876001611c9f565b90506000610b56610aa98760028d60600151611c9f9092919063ffffffff16565b90506000610b678b60600151611d99565b63ffffffff1690506000612710828d606001516101400151600081518110610b9157610b91614d79565b602002602001015160600151610ba79190614e15565b610bb19190614e2c565b9050610be46040518060400160405280600f81526020016e1c1c9bd8d95cdcc81c9bdd5b991259608a1b8152508561165f565b610c156040518060400160405280600f81526020016e1c1c9bd8d95cdcc819dc9bdd5c1259608a1b8152508461165f565b610c4b604051806040016040528060148152602001731c1c9bd8d95cdcc81858dd1d585b105b5bdd5b9d60621b8152508261165f565b610c5887828e8787611dd4565b50505050611055565b60011960ff831601610e2b57610c9d6040518060400160405280600f81526020016e70726f6365737320636c61696d203160881b81525061161c565b6060880151600090610cb590610aa990876001611c9f565b9050610cee604051806040016040528060158152602001741c1c9bd8d95cdcc818db185a5b481c9bdd5b991259605a1b8152508261165f565b6000806000610cfe878d86611ef0565b925092509250610d2c60405180604001604052806006815260200165185b5bdd5b9d60d21b8152508461165f565b610d5460405180604001604052806006815260200165185b5bdd5b9d60d21b8152508361165f565b610d7c604051806040016040528060068152602001650c4e4c2dcc6d60d31b8152508261165f565b600083158015610d8a575081155b8015610d94575082155b159050610dcf604051806040016040528060168152602001750383937b1b2b9b99021a6a22fa1b620a4a6903bb4b7160551b8152508261202c565b8015610e16578115610dfc57610dfc8d876001610ded866065614e4e565b610df79190614e67565b612071565b610e118d8789610e0c8789614e80565b612114565b610e21565b610e218d878961233b565b5050505050611055565b60021960ff831601610f71576060880151600090610e4f90610aa990876001611c9f565b9050610e946040518060400160405280601c81526020017f70726f6365737320434d445f57495448445241572063616c6c657220000000008152508a60000151612375565b610ed36040518060400160405280601c81526020017f70726f6365737320434d445f574954484452415720616d6f756e7420000000008152508261165f565b6067548951604051637c75693b60e11b81526000926001600160a01b03169163f8ead27691610f089189918790600401614e93565b6020604051808303816000875af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190614eb2565b905080610f59576000610f5b565b815b9150610f6a8a84600385612114565b5050611055565b60031960ff831601611022576060880151600090610f9590610aa990876001611c9f565b6067548a5160405163097942f360e01b81529293506000926001600160a01b039092169163097942f391610fd0918991908790600401614e93565b6020604051808303816000875af1158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110139190614ed4565b9050610f6a8a84600484612114565b60041960ff83160161105557606088015160009061104690610aa990876001611c9f565b9050611053848a836123ba565b505b60ff82166001148061106a575060ff82166005145b1561107a5761107a88828461233b565b5050606460208601525092949350505050565b6040518060400160405280601681526020017521b63ab9ba32b9293ab632a0b932b0a430b7323632b960511b8152506065816040516110cc9190614cc1565b90815260405190819003602001902054336001600160a01b03909116146111055760405162461bcd60e51b815260040161041490614cdd565b505050565b6060600082604001518360600151846080015160405160200161112f93929190614df3565b60408051601f19818403018152828252805160209182012060e0840183526000808552918401829052918301819052606083018190526080830181905260a0830181905260c0830152915060e084015163ffffffff90811660a083015260608086015161ffff90811660408086019190915260808089015190921692850192909252818701519092166020808501919091528601516001600160a01b03908116845260c08701518116928401929092526067546101208701516101408801519251630db778bd60e11b81526000949290921692631b6ef17a92611219929188918890600401614f56565b600060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261125e9190810190614fb9565b95945050505050565b33611270610955565b6001600160a01b0316146112965760405162461bcd60e51b815260040161041490614dbe565b6112ca60405180604001604052806013815260200172736574456e67696e65417265614c697374203160681b81525061161c565b6112d3816124e2565b6113076040518060400160405280601381526020017239b2ba22b733b4b732a0b932b0a634b9ba101960691b81525061161c565b60408051808201825260148152732927aaa7222fa420a7222622a92fa422a62822a960611b6020820152905160659161133f91614cc1565b90815260408051918290036020908101832054606780546001600160a01b0319166001600160a01b039092169190911790558282019091526013825272736574456e67696e65417265614c697374203360681b9082015261139f9061161c565b6000606560405180604001604052806013815260200172524f554e445f48414e444c45525f535441544560681b8152506040516113dc9190614cc1565b9081526040805191829003602090810183205483830190925260138352721cd95d115b99da5b99505c9958531a5cdd080d606a1b908301526001600160a01b031691506114289061161c565b60675460405163615e9aa960e11b81526001600160a01b039091169063c2bd355290611458908490600401613d02565b600060405180830381600087803b15801561147257600080fd5b505af1158015610725573d6000803e3d6000fd5b600060405180604001604052806006815260200165456e67696e6560d01b8152506065816040516114b79190614cc1565b90815260405190819003602001902054336001600160a01b03909116146114f05760405162461bcd60e51b815260040161041490614cdd565b50600092915050565b6040805160208101909152600081525b9392505050565b33611519610955565b6001600160a01b03161461153f5760405162461bcd60e51b815260040161041490614dbe565b6001600160a01b0381166115a45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610414565b61095281611b41565b604080516001600160a01b039889166020808301919091529789168183015263ffffffff968716606082015294881660808601529290941660a084015290941660c082015261ffff90911660e08083019190915283518083039091018152610100909101909252815191012090565b610952816040516024016116309190613a6e565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052612604565b6116a48282604051602401611675929190615071565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052612604565b5050565b6000806116bc6116b78561260d565b612633565b90506117056116e6828560ff16815181106116d9576116d9614d79565b6020026020010151612633565b6002815181106116f8576116f8614d79565b6020026020010151611cec565b9150505b92915050565b600061171a8261273c565b9050600085858560405160200161173393929190614df3565b6040516020818303038152906040528051906020012090506117fb604051806102600160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815260200160006001600160a01b031681525090565b61180361274c565b60208201524260408201526118198460006116a8565b81526118268460016116a8565b60c08201526118368460026116a8565b60e08201526118468460036116a8565b6101008201526118578460046116a8565b6101408201526118688460056116a8565b60808201526118788460066116a8565b60608201526118888460076116a8565b60ff1661018082015261189c8460086116a8565b60ff166101a08201526118b08460096116a8565b60ff166101c08201526118c484600a6116a8565b60ff166101e08201526118d884600b6116a8565b60ff1661020082015260006118ee85600c6127c9565b90506118fb85600d6116a8565b61012083015261190c85600e6116a8565b60ff1661022083015280516000906001600160401b038111156119315761193161364d565b60405190808252806020026020018201604052801561198357816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161194f5790505b5090506000805b8351811015611a8b57600061199f8583612808565b90506119d6604051806040016040528060128152602001710e4c2dcc8deda92e8cadae640d8cadccee8d60731b815250825161165f565b6119e1816000612825565b8483815181106119f3576119f3614d79565b60209081029190910101516001600160a01b039091169052611a16816001612861565b848381518110611a2857611a28614d79565b60200260200101516020019063ffffffff16908163ffffffff1681525050838281518110611a5857611a58614d79565b60200260200101516020015163ffffffff1683611a759190614e80565b9250508080611a8390614da5565b91505061198a565b506127108110611acf5760405162461bcd60e51b815260206004820152600f60248201526e666565546f74616c206572726f722160881b6044820152606401610414565b606754604051635d6e66bf60e11b81526001600160a01b039091169063badccd7e90611b03908890889087906004016150f2565b600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b5050505050505050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611bda578160ff166001148015611bb65750303b155b611bd25760405162461bcd60e51b815260040161041490615233565b506000919050565b60005460ff808416911610611c015760405162461bcd60e51b815260040161041490615233565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff16611c475760405162461bcd60e51b815260040161041490615281565b6108de61287e565b606061170982306128ae565b60006117098260a00151601060006008611c759190614e80565b612953565b60006117098260a00151601060006008611c949190614e80565b611c75906010614e80565b611ca761354a565b611cc983611cb6846001614e4e565b60ff16815181106116d9576116d9614d79565b600281518110611cdb57611cdb614d79565b602002602001015190509392505050565b805160009015801590611d0157508151602110155b611d0a57600080fd5b600080611d1684612972565b815191935091506020821015611d325760208290036101000a90045b949350505050565b6000611d4983606001516129b9565b90508160ff168160ff16146111055760405162461bcd60e51b81526020600482015260166024820152752fb1b432b1b5a1a6a210313930b731b41032b93937b960511b6044820152606401610414565b60006117098260a00151602060006008611db39190614e80565b611dbe906010614e80565b611dc9906010614e80565b611c94906008614e80565b606760009054906101000a90046001600160a01b03166001600160a01b03166360c07fdc868484886040518060e001604052808a60600151602001516001600160a01b031681526020018a60600151610100015163ffffffff168152602001611e408b60600151611c5b565b61ffff168152602001611e568b60600151611c7a565b61ffff1681526020018a602001516001600160a01b031681526020018a6060015160c0015163ffffffff1681526020018a600001516001600160a01b03168152506040518663ffffffff1660e01b8152600401611eb79594939291906152cc565b600060405180830381600087803b158015611ed157600080fd5b505af1158015611ee5573d6000803e3d6000fd5b505050505050505050565b6000806000606760009054906101000a90046001600160a01b03166001600160a01b0316634e4a539f878688600001516040518060e001604052808b60600151602001516001600160a01b031681526020018b60600151610100015163ffffffff168152602001611f648c60600151611c5b565b61ffff168152602001611f7a8c60600151611c7a565b61ffff1681526020018b602001516001600160a01b031681526020018b6060015160c0015163ffffffff1681526020018b600001516001600160a01b03168152506040518563ffffffff1660e01b8152600401611fda94939291906152f7565b6060604051808303816000875af1158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d9190615322565b92509250925093509350939050565b6116a48282604051602401612042929190615350565b60408051601f198184030181529190526020810180516001600160e01b031663c3b5563560e01b179052612604565b6120a5604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525061161c565b60006120af6129de565b90506120c76040518060200160405280606081525090565b600160608301526002825260ff831660408301526120e58183612a25565b600084815260666020908152604090912082518051849361210a928492910190613564565b5050505050505050565b612148604051806040016040528060138152602001722fb83937b1b2b9b9a1b630b4b6903132b3b4b760691b81525061161c565b60006121526129de565b905061216a6040518060200160405280606081525090565b6001606083015260ff8416600214612183576004612186565b60025b60ff90811683528416600214801561219c575082155b156121a8575050612335565b6040805160018082528183019092529060208083019080368337505050610160830181905280518491906000906121e1576121e1614d79565b602090810291909101015260016101208301526065604083015260031960ff85160161220f57600260408301525b60021960ff85160161222357600160408301525b61222d8183612a25565b61225360405180606001604052806023815260200161549360239139835160ff1661165f565b61227d6040518060600160405280602581526020016154406025913983610120015160ff1661165f565b6122be6040518060600160405280602181526020016154ff602191398361016001516000815181106122b1576122b1614d79565b602002602001015161165f565b6122e76040518060600160405280602481526020016154db60249139836040015160ff1661165f565b6123106040518060c00160405280608e8152602001615520608e9139836060015160ff1661165f565b6000858152606660209081526040909120825180518493611ee5928492910190613564565b50505050565b60006123456129de565b905061235d6040518060200160405280606081525090565b60006040830152600160208301526120e58183612a25565b6116a4828260405160240161238b929190615374565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612604565b606760009054906101000a90046001600160a01b03166001600160a01b0316636e8580b2848460000151846040518060e001604052808860600151602001516001600160a01b031681526020018860600151610100015163ffffffff1681526020016124298960600151611c5b565b61ffff16815260200161243f8960600151611c7a565b61ffff16815260200188602001516001600160a01b03168152602001886060015160c0015163ffffffff16815260200188600001516001600160a01b03168152506040518563ffffffff1660e01b815260040161249f949392919061539e565b6020604051808303816000875af11580156124be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123359190614ed4565b336124eb610955565b6001600160a01b0316146125115760405162461bcd60e51b815260040161041490614dbe565b60005b81518110156116a45781818151811061252f5761252f614d79565b6020026020010151606583838151811061254b5761254b614d79565b60200260200101516001600160a01b03166334c76b256040518163ffffffff1660e01b8152600401600060405180830381865afa158015612590573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125b891908101906153c9565b6040516125c59190614cc1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790556125fd81614da5565b9050612514565b61095281613024565b61261561354a565b50604080518082019091528151815260209182019181019190915290565b606061263e82613045565b61264757600080fd5b600061265283613080565b90506000816001600160401b0381111561266e5761266e61364d565b6040519080825280602002602001820160405280156126a757816020015b61269461354a565b81526020019060019003908161268c5790505b50905060006126b98560200151613105565b85602001516126c89190614e80565b90506000805b84811015612731576126df83613180565b915060405180604001604052808381526020018481525084828151811061270857612708614d79565b602090810291909101015261271d8284614e80565b92508061272981614da5565b9150506126ce565b509195945050505050565b606060006115096116b78461260d565b60004661a4b18190036127c25760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bc9190614ed4565b91505090565b4391505090565b606060006127d96116b78561260d565b90506117056127f6828560ff16815181106116d9576116d9614d79565b6002815181106116d9576116d9614d79565b60606115096127f6848460ff16815181106116d9576116d9614d79565b6000611509612842848460ff16815181106116d9576116d9614d79565b60028151811061285457612854614d79565b6020026020010151613224565b60006115096116e6848460ff16815181106116d9576116d9614d79565b600054610100900460ff166128a55760405162461bcd60e51b815260040161041490615281565b6108de33611b41565b606060006128c36116b785610160015161260d565b905060005b81518110156129485760006128fd6128eb8484815181106116d9576116d9614d79565b60008151811061285457612854614d79565b9050846001600160a01b0316816001600160a01b0316036129375761292d8383815181106116d9576116d9614d79565b9350505050611709565b5061294181614da5565b90506128c8565b506060949350505050565b91821c91600080612967600180861b615411565b909416949350505050565b60008060006129848460200151613105565b905060008185602001516129989190614e80565b905060008286600001516129ac9190615411565b9196919550909350505050565b60006117098260a001516008600060086129d39190614e80565b611c94906010614e80565b6129e66135af565b6129ee6135af565b6000808252604082018190526127106080830181905260a0830181905260c083019190915260e08201819052610100820152919050565b60c081015160019015612a405780612a3c81614da5565b9150505b8160e0015161271014612a5b5780612a5781614da5565b9150505b81610100015161271014612a775780612a7381614da5565b9150505b61014082015151151580612a9057506101608201515115155b80612aa057506101a08201515115155b15612b12576000826101600151518361014001515111612ae557826101a00151518361016001515111612ad957826101a0015151612aed565b82610160015151612aed565b826101400151515b9050612afa816004614e15565b612b049083614e80565b60ff90911661012084015290505b612b3c6040518060600160405280602e8152602001615465602e913983610120015160ff1661165f565b806001600160401b03811115612b5457612b5461364d565b604051908082528060200260200182016040528015612b7d578160200160208202803683370190505b5083528151612b8d90849061323e565b612b9b838360200151613296565b612ba98383606001516132d7565b612bb7838360400151613326565b612bc68383610120015161336a565b612be76040518060600160405280602581526020016154b66025913961161c565b60008060019050836080015162ffffff1661271014612c1c57612c0e8585608001516133fb565b612c19600183615424565b91505b8360a0015163ffffffff1661271014612c4b57612c3d858560a00151613462565b612c48600283615424565b91505b60c084015115612c915760c0840151855182612c6681614da5565b935081518110612c7857612c78614d79565b6020908102919091010152612c8e600483615424565b91505b8360e0015161271014612cda5760e0840151855182612caf81614da5565b935081518110612cc157612cc1614d79565b6020908102919091010152612cd7600883615424565b91505b83610100015161271014612d2557610100840151855182612cfa81614da5565b935081518110612d0c57612d0c614d79565b6020908102919091010152612d22601083615424565b91505b61012084015160ff16156130135760005b84610120015160ff16811015612fe157600085610140015151118015612d6157508461014001515181105b15612db8578461014001518181518110612d7d57612d7d614d79565b602002602001015186600001518380612d9590614da5565b945081518110612da757612da7614d79565b602002602001018181525050612de6565b855160009083612dc781614da5565b945081518110612dd957612dd9614d79565b6020026020010181815250505b600085610160015151118015612e0157508461016001515181105b15612e58578461016001518181518110612e1d57612e1d614d79565b602002602001015186600001518380612e3590614da5565b945081518110612e4757612e47614d79565b602002602001018181525050612e86565b855160009083612e6781614da5565b945081518110612e7957612e79614d79565b6020026020010181815250505b600085610180015151118015612ea157508461018001515181105b15612efb578461018001518181518110612ebd57612ebd614d79565b602002602001015160ff1686600001518380612ed890614da5565b945081518110612eea57612eea614d79565b602002602001018181525050612f28565b8551819083612f0981614da5565b945081518110612f1b57612f1b614d79565b6020026020010181815250505b6000856101a0015151118015612f435750846101a001515181105b15612fa357846101a001518181518110612f5f57612f5f614d79565b60200260200101516001600160a01b031686600001518380612f8090614da5565b945081518110612f9257612f92614d79565b602002602001018181525050612fd1565b855160009083612fb281614da5565b945081518110612fc457612fc4614d79565b6020026020010181815250505b612fda81614da5565b9050612d36565b50612fed602083615424565b91506130136040518060800160405280604481526020016155ae6044913986515161165f565b61301d85836134d5565b5050505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b8051600090810361305857506000919050565b6020820151805160001a9060c0821015613076575060009392505050565b5060019392505050565b8051600090810361309357506000919050565b6000806130a38460200151613105565b84602001516130b29190614e80565b90506000846000015185602001516130ca9190614e80565b90505b808210156130fc576130de82613180565b6130e89083614e80565b9150826130f481614da5565b9350506130cd565b50909392505050565b8051600090811a608081101561311e5750600092915050565b60b8811080613139575060c08110801590613139575060f881105b156131475750600192915050565b60c08110156131745761315c600160b8614e67565b6131699060ff1682615411565b611509906001614e80565b61315c600160f8614e67565b80516000908190811a608081101561319b5760019150610803565b60b88110156131c1576131af608082615411565b6131ba906001614e80565b9150610803565b60c08110156131ee5760b78103600185019450806020036101000a85510460018201810193505050610803565b60f8811015613202576131af60c082615411565b60019390930151602084900360f7016101000a900490920160f5190192915050565b805160009060151461323557600080fd5b61170982611cec565b613273826000015160008151811061325857613258614d79565b60200260200101518260ff16600860ff16600060ff16613525565b8251805160009061328657613286614d79565b6020026020010181815250505050565b61327382600001516000815181106132b0576132b0614d79565b60200260200101518260ff16600460ff16600060086132cf9190614e4e565b60ff16613525565b61327382600001516000815181106132f1576132f1614d79565b60200260200101518260ff16600460ff16600060086133109190614e4e565b61331b906004614e4e565b6132cf906008614e4e565b613273826000015160008151811061334057613340614d79565b60200260200101518260ff16600860ff166000600861335f9190614e4e565b6132cf906004614e4e565b613273826000015160008151811061338457613384614d79565b60200260200101518260ff16600860ff16600060086133a39190614e4e565b6133ae906004614e4e565b6133b9906008614e4e565b6133c4906004614e4e565b6133cf906010614e4e565b6133da906018614e4e565b6133e5906020614e4e565b6133f0906020614e4e565b6132cf906020614e4e565b613273826000015160008151811061341557613415614d79565b60200260200101518262ffffff16601860ff16600060086134369190614e4e565b613441906004614e4e565b61344c906008614e4e565b613457906004614e4e565b6132cf906010614e4e565b613273826000015160008151811061347c5761347c614d79565b60200260200101518263ffffffff16602060ff166000600861349e9190614e4e565b6134a9906004614e4e565b6134b4906008614e4e565b6134bf906004614e4e565b6134ca906010614e4e565b6132cf906018614e4e565b61327382600001516000815181106134ef576134ef614d79565b60200260200101518261ffff16601060ff166000600861350f9190614e4e565b61351a906004614e4e565b61335f906008614e4e565b600083821b8183613539600180881b615411565b901b19969096161795945050505050565b604051806040016040528060008152602001600081525090565b82805482825590600052602060002090810192821561359f579160200282015b8281111561359f578251825591602001919060010190613584565b506135ab929150613638565b5090565b604051806101c00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600062ffffff168152602001600063ffffffff168152602001600081526020016000815260200160008152602001600060ff168152602001606081526020016060815260200160608152602001606081525090565b5b808211156135ab5760008155600101613639565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b03811182821017156136865761368661364d565b60405290565b60405160a081016001600160401b03811182821017156136865761368661364d565b604080519081016001600160401b03811182821017156136865761368661364d565b604051608081016001600160401b03811182821017156136865761368661364d565b60405161018081016001600160401b03811182821017156136865761368661364d565b604051606081016001600160401b03811182821017156136865761368661364d565b60405161016081016001600160401b03811182821017156136865761368661364d565b604051601f8201601f191681016001600160401b03811182821017156137825761378261364d565b604052919050565b80356001600160a01b0381168114611c1b57600080fd5b803563ffffffff81168114611c1b57600080fd5b803560ff81168114611c1b57600080fd5b803561ffff81168114611c1b57600080fd5b600061014082840312156137eb57600080fd5b6137f3613663565b6137fc8361378a565b815261380a6020840161378a565b602082015261381b6040840161378a565b604082015261382c606084016137a1565b606082015261383d608084016137a1565b608082015261384e60a0840161378a565b60a082015261385f60c084016137b5565b60c082015261387060e084016137c6565b60e08201526101006138838185016137b5565b908201526101206138958482016137b5565b908201529392505050565b60006001600160401b038211156138b9576138b961364d565b50601f01601f191660200190565b600082601f8301126138d857600080fd5b81356138eb6138e6826138a0565b61375a565b81815284602083860101111561390057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b03121561393a57600080fd5b6139438961378a565b975061395160208a0161378a565b965061395f60408a0161378a565b955061396d60608a016137a1565b945061397b60808a0161378a565b935061398960a08a016137a1565b925060c08901356001600160401b038111156139a457600080fd5b6139b08b828c016138c7565b9250506139bf60e08a016137c6565b90509295985092959890939650565b6020808252825182820182905280516040840181905260009291820190839060608601905b80831015613a1357835182529284019260019290920191908401906139f3565b509695505050505050565b60005b83811015613a39578181015183820152602001613a21565b50506000910152565b60008151808452613a5a816020860160208601613a1e565b601f01601f19169290920160200192915050565b6020815260006115096020830184613a42565b60008060008060008060c08789031215613a9a57600080fd5b613aa38761378a565b9550613ab16020880161378a565b9450613abf604088016137a1565b9350613acd6060880161378a565b9250613adb608088016137a1565b9150613ae960a088016137c6565b90509295509295509295565b6020808252825182820181905260009190848201906040850190845b81811015613b365783516001600160a01b031683529284019291840191600101613b11565b50909695505050505050565b60008060008060808587031215613b5857600080fd5b613b61856137a1565b9350613b6f602086016137c6565b9250613b7d604086016137b5565b915060608501356001600160401b03811115613b9857600080fd5b613ba4878288016138c7565b91505092959194509250565b60006001600160401b03821115613bc957613bc961364d565b5060051b60200190565b60006020808385031215613be657600080fd5b82356001600160401b0380821115613bfd57600080fd5b818501915085601f830112613c1157600080fd5b8135613c1f6138e682613bb0565b81815260059190911b83018401908481019088831115613c3e57600080fd5b8585015b83811015613c7657803585811115613c5a5760008081fd5b613c688b89838a01016138c7565b845250918601918601613c42565b5098975050505050505050565b600080600080600060a08688031215613c9b57600080fd5b613ca4866137a1565b9450613cb2602087016137c6565b9350613cc0604087016137c6565b9250613cce606087016137b5565b915060808601356001600160401b03811115613ce957600080fd5b613cf5888289016138c7565b9150509295509295909350565b6001600160a01b0391909116815260200190565b600082601f830112613d2757600080fd5b81356020613d376138e683613bb0565b82815260059290921b84018101918181019086841115613d5657600080fd5b8286015b84811015613a135780356001600160401b0380821115613d7957600080fd5b9088019060a0828b03601f19011215613d9157600080fd5b613d9961368c565b613da48784016137b5565b81526040613db381850161378a565b888301526060840135818301526080840135606083015260a084013583811115613ddd5760008081fd5b8085019450508b603f850112613df557600092508283fd5b878401359250613e076138e684613bb0565b83815260069390931b8401810192888101908d851115613e275760008081fd5b948201945b84861015613e7e5782868f031215613e445760008081fd5b613e4c6136ae565b613e55876137a1565b81528a8701358060040b8114613e6b5760008081fd5b818c015282529482019490890190613e2c565b6080840152505085525050918301918301613d5a565b600060808284031215613ea657600080fd5b613eae6136d0565b9050613eb98261378a565b8152613ec7602083016137b5565b602082015260408201356001600160401b0380821115613ee657600080fd5b613ef2858386016138c7565b60408401526060840135915080821115613f0b57600080fd5b50613f18848285016138c7565b60608301525092915050565b60008060408385031215613f3757600080fd5b82356001600160401b0380821115613f4e57600080fd5b9084019060a08287031215613f6257600080fd5b613f6a61368c565b613f738361378a565b8152613f816020840161378a565b6020820152613f926040840161378a565b6040820152606083013582811115613fa957600080fd5b83016101808189031215613fbc57600080fd5b613fc46136f2565b613fcd8261378a565b8152613fdb6020830161378a565b6020820152613fec6040830161378a565b6040820152613ffd6060830161378a565b60608201526080820135608082015260a082013560a082015261402260c083016137a1565b60c082015261403360e083016137a1565b60e08201526101006140468184016137a1565b908201526101206140588382016137b5565b90820152610140828101358581111561407057600080fd5b61407c8b828601613d16565b828401525050610160808301358581111561409657600080fd5b6140a28b8286016138c7565b82840152505080606084015250506140bc608084016137b5565b6080820152935060208501359150808211156140d757600080fd5b506140e485828601613e94565b9150509250929050565b6020815260018060a01b03825116602082015260ff6020830151166040820152600060408301516080606084015261412960a0840182613a42565b90506060840151601f1984830301608085015261125e8282613a42565b600082601f83011261415757600080fd5b813560206141676138e683613bb0565b82815260059290921b8401810191818101908684111561418657600080fd5b8286015b84811015613a13578035835291830191830161418a565b600082601f8301126141b257600080fd5b813560206141c26138e683613bb0565b82815260059290921b840181019181810190868411156141e157600080fd5b8286015b84811015613a13576141f68161378a565b83529183019183016141e5565b600082601f83011261421457600080fd5b813560206142246138e683613bb0565b82815260059290921b8401810191818101908684111561424357600080fd5b8286015b84811015613a135780356001600160401b038082111561426657600080fd5b90880190601f196080838c038201121561427f57600080fd5b6142876136d0565b878401358381111561429857600080fd5b84016060818e03840112156142ac57600080fd5b6142b4613715565b92506142c18982016137b5565b835260406142d081830161378a565b8a8501526060820135858111156142e657600080fd5b6142f48f8c83860101614146565b82860152508383526143078187016137b5565b8a840152606086013593508484111561431f57600080fd5b61432d8e8b868901016141a1565b9083015250608084013591508282111561434657600080fd5b6143548c8984870101614146565b60608201528652505050918301918301614247565b600082601f83011261437a57600080fd5b8135602061438a6138e683613bb0565b82815260059290921b840181019181810190868411156143a957600080fd5b8286015b84811015613a135780356001600160401b038111156143cc5760008081fd5b6143da8986838b01016138c7565b8452509183019183016143ad565b600082601f8301126143f957600080fd5b813560206144096138e683613bb0565b82815260059290921b8401810191818101908684111561442857600080fd5b8286015b84811015613a135780356001600160401b038082111561444c5760008081fd5b9088019060a0828b03601f19018113156144665760008081fd5b61446e61368c565b87840135838111156144805760008081fd5b61448e8d8a83880101614203565b825250604061449e8186016137b5565b8983015260606144af81870161378a565b828401526080915081860135858111156144c95760008081fd5b6144d78f8c838a01016141a1565b828501525050828501359250838311156144f15760008081fd5b6144ff8d8a85880101614369565b90820152865250505091830191830161442c565b600082601f83011261452457600080fd5b813560206145346138e683613bb0565b82815260059290921b8401810191818101908684111561455357600080fd5b8286015b84811015613a1357614568816137b5565b8352918301918301614557565b80356001600160401b0381168114611c1b57600080fd5b600082601f83011261459d57600080fd5b813560206145ad6138e683613bb0565b82815260059290921b840181019181810190868411156145cc57600080fd5b8286015b84811015613a135780356001600160401b03808211156145f05760008081fd5b90880190610160828b03601f190181131561460b5760008081fd5b614613613737565b61461e8885016137c6565b8152604061462d8186016137c6565b89830152606061463e8187016137b5565b82840152608091506146518287016137a1565b9083015260a06146628682016137b5565b8284015260c091506146758287016137a1565b9083015260e06146868682016137a1565b82840152610100915061469a828701614575565b9083015261012085810135858111156146b35760008081fd5b6146c18f8c838a01016141a1565b8385015250610140915081860135858111156146dd5760008081fd5b6146eb8f8c838a0101614369565b8285015250506146fc83860161378a565b9082015286525050509183019183016145d0565b600082601f83011261472157600080fd5b813560206147316138e683613bb0565b82815260059290921b8401810191818101908684111561475057600080fd5b8286015b84811015613a135780356001600160401b03808211156147745760008081fd5b9088019060a0828b03601f190181131561478e5760008081fd5b61479661368c565b6147a18885016137a1565b8152604080850135848111156147b75760008081fd5b6147c58e8b838901016138c7565b8a84015250606080860135858111156147de5760008081fd5b6147ec8f8c838a01016138c7565b83850152506080915081860135858111156148075760008081fd5b6148158f8c838a01016138c7565b8285015250506148268386016137b5565b908201528652505050918301918301614754565b6000806040838503121561484d57600080fd5b614856836137a1565b915060208301356001600160401b038082111561487257600080fd5b90840190610160828703121561488757600080fd5b61488f613737565b82358281111561489e57600080fd5b6148aa888286016143e8565b8252506020830135828111156148bf57600080fd5b6148cb88828601614513565b6020830152506040830135828111156148e357600080fd5b6148ef8882860161458c565b60408301525060608301358281111561490757600080fd5b61491388828601614710565b60608301525060808301358281111561492b57600080fd5b61493788828601614513565b60808301525060a08301358281111561494f57600080fd5b61495b888286016141a1565b60a08301525060c08301358281111561497357600080fd5b61497f888286016141a1565b60c08301525061499160e084016137a1565b60e08201526101006149a48185016137a1565b908201526101206149b68482016137b5565b9082015261014083810135838111156149ce57600080fd5b6149da898287016138c7565b8284015250508093505050509250929050565b6000602082840312156149ff57600080fd5b81356001600160401b0380821115614a1657600080fd5b908301906101608286031215614a2b57600080fd5b614a33613737565b614a3c8361378a565b8152614a4a6020840161378a565b6020820152614a5b604084016137a1565b6040820152614a6c606084016137c6565b6060820152614a7d608084016137c6565b6080820152614a8e60a084016137b5565b60a0820152614a9f60c0840161378a565b60c0820152614ab060e084016137a1565b60e0820152610100614ac381850161378a565b90820152610120614ad58482016137b5565b908201526101408381013583811115614aed57600080fd5b614af9888287016138c7565b918301919091525095945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614b5f57603f19888603018452614b4d858351613a42565b94509285019290850190600101614b31565b5092979650505050505050565b600060208284031215614b7e57600080fd5b81356001600160401b03811115614b9457600080fd5b611705848285016141a1565b600080600060608486031215614bb557600080fd5b614bbe846137a1565b9250614bcc602085016137c6565b9150614bda604085016137b5565b90509250925092565b600060208284031215614bf557600080fd5b6115098261378a565b600081518084526020808501945080840160005b83811015614c3157815160ff1687529582019590820190600101614c12565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015614cb357888303603f1901855281518051878552614c8788860182614bfe565b91890151858303868b0152919050614c9f8183614bfe565b968901969450505090860190600101614c63565b509098975050505050505050565b60008251614cd3818460208701613a1e565b9190910192915050565b6020808252601d908201527f73656e646572206e6f74206d6174636820617265612061646472657373000000604082015260600190565b828152604060208201528151604082015260ff60208301511660608201526000604083015160a06080840152614d4d60e0840182613a42565b606085015163ffffffff90811660a086015260809095015190941660c090930192909252509092915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614db757614db7614d8f565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b808202811582820484141761170957611709614d8f565b600082614e4957634e487b7160e01b600052601260045260246000fd5b500490565b60ff818116838216019081111561170957611709614d8f565b60ff828116828216039081111561170957611709614d8f565b8082018082111561170957611709614d8f565b9283526001600160a01b03919091166020830152604082015260600190565b600060208284031215614ec457600080fd5b8151801515811461150957600080fd5b600060208284031215614ee657600080fd5b5051919050565b60018060a01b03808251168352602082015163ffffffff80821660208601526040840151915061ffff8083166040870152806060860151166060870152508260808501511660808601528060a08501511660a086015250508060c08301511660c0840152505050565b600061014060ff87168352856020840152806040840152614f7981840186613a42565b91505061125e6060830184614eed565b6000614f976138e6846138a0565b9050828152838383011115614fab57600080fd5b611509836020830184613a1e565b60006020808385031215614fcc57600080fd5b82516001600160401b0380821115614fe357600080fd5b818501915085601f830112614ff757600080fd5b81516150056138e682613bb0565b81815260059190911b8301840190848101908883111561502457600080fd5b8585015b83811015613c76578051858111156150405760008081fd5b8601603f81018b136150525760008081fd5b6150638b8983015160408401614f89565b845250918601918601615028565b6040815260006150846040830185613a42565b90508260208301529392505050565b600081518084526020808501945080840160005b83811015614c3157815180516001600160a01b031688528381015163ffffffff16848901526040808201519089015260609081015190880152608090960195908201906001016150a7565b60006102a085835284516020840152602085015160408401526040850151606084015260608501516080840152608085015160a084015260a085015160c084015260c085015160e084015260e08501516101008181860152808701519150506101208181860152808701519150506101408181860152808701519150506101608181860152808701519150506101808181860152808701519150506101a061519e8186018360ff169052565b86015190506101c06151b48582018360ff169052565b86015190506101e06151ca8582018360ff169052565b86015190506102006151e08582018360ff169052565b86015190506102206151f68582018360ff169052565b860151905061024061520c8582018360ff169052565b8601516001600160a01b031661026085015250610280830181905261039981840185615093565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000610160820190508682528560208301528460408301528360608301526103996080830184614eed565b848152602081018490526001600160a01b0383166040820152610140810161125e6060830184614eed565b60008060006060848603121561533757600080fd5b8351925060208401519150604084015190509250925092565b6040815260006153636040830185613a42565b905082151560208301529392505050565b6040815260006153876040830185613a42565b905060018060a01b03831660208301529392505050565b8481526001600160a01b038416602082015260408101839052610140810161125e6060830184614eed565b6000602082840312156153db57600080fd5b81516001600160401b038111156153f157600080fd5b8201601f8101841361540257600080fd5b61170584825160208401614f89565b8181038181111561170957611709614d8f565b61ffff81811683821601908082111561080357610803614d8f56fe726f756e6448616e646c6572205f70726f63657373436c61696d20746f6b656e436f756e742d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e74726f756e6448616e646c6572205f70726f63657373436c61696d20696e4272616e63682d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d732031726f756e6448616e646c6572205f70726f63657373436c61696d206f75744272616e6368726f756e6448616e646c6572205f70726f63657373436c61696d20616d6f756e74726f756e6448616e646c6572205f70726f63657373436c612d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d696d20706172616d732e6f75744272616e636850726f636573732d2d2d2d2d2d2d2d2d2d2d2d20746f6b656e48616e646c657220736574506172616d7320746f6b656e436f756e742073656c662e76616c75654c6973742e6c656e677468a2646970667358221220d826e5ebdbf12394dd1642658b628f9b9e857f856c73db33110da2f026d2ca2d64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
