{
  "_format": "hh-sol-artifact-1",
  "contractName": "Ticket",
  "sourceName": "@pooltogether/v4-core/contracts/Ticket.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        }
      ],
      "name": "Delegated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "Deployed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "indexed": false,
          "internalType": "struct ObservationLib.Observation",
          "name": "newTotalSupplyTwab",
          "type": "tuple"
        }
      ],
      "name": "NewTotalSupplyTwab",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "indexed": false,
          "internalType": "struct ObservationLib.Observation",
          "name": "newTwab",
          "type": "tuple"
        }
      ],
      "name": "NewUserTwab",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "controller",
          "type": "address"
        }
      ],
      "name": "TicketInitialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerBurnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "controllerDelegateFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "delegateOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newDelegate",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "delegateWithSignature",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "getAccountDetails",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint208",
              "name": "balance",
              "type": "uint208"
            },
            {
              "internalType": "uint24",
              "name": "nextTwabIndex",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "cardinality",
              "type": "uint24"
            }
          ],
          "internalType": "struct TwabLib.AccountDetails",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_startTime",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "_endTime",
          "type": "uint64"
        }
      ],
      "name": "getAverageBalanceBetween",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64[]",
          "name": "_startTimes",
          "type": "uint64[]"
        },
        {
          "internalType": "uint64[]",
          "name": "_endTimes",
          "type": "uint64[]"
        }
      ],
      "name": "getAverageBalancesBetween",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[]",
          "name": "_startTimes",
          "type": "uint64[]"
        },
        {
          "internalType": "uint64[]",
          "name": "_endTimes",
          "type": "uint64[]"
        }
      ],
      "name": "getAverageTotalSuppliesBetween",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_target",
          "type": "uint64"
        }
      ],
      "name": "getBalanceAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint64[]",
          "name": "_targets",
          "type": "uint64[]"
        }
      ],
      "name": "getBalancesAt",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[]",
          "name": "_targets",
          "type": "uint64[]"
        }
      ],
      "name": "getTotalSuppliesAt",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_target",
          "type": "uint64"
        }
      ],
      "name": "getTotalSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_index",
          "type": "uint16"
        }
      ],
      "name": "getTwab",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "internalType": "struct ObservationLib.Observation",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101c06040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140527f94019368dc6b2ee4ac32010c9d0081ec29874325b541829d001d22c296b5246c6101a0523480156200005c57600080fd5b5060405162003d0c38038062003d0c8339810160408190526200007f916200042a565b838383836040518060400160405280601c81526020017f506f6f6c546f67657468657220436f6e74726f6c6c6564546f6b656e0000000081525080604051806040016040528060018152602001603160f81b81525086868160039080519060200190620000ee929190620002f3565b50805162000104906004906020840190620002f3565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060601b60c0526101205250505050506001600160a01b0381166200020c5760405162461bcd60e51b815260206004820152602b60248201527f436f6e74726f6c6c6564546f6b656e2f636f6e74726f6c6c65722d6e6f742d7a60448201526a65726f2d6164647265737360a81b60648201526084015b60405180910390fd5b6001600160601b0319606082901b166101605260ff8216620002715760405162461bcd60e51b815260206004820181905260248201527f436f6e74726f6c6c6564546f6b656e2f646563696d616c732d67742d7a65726f604482015260640162000203565b7fff0000000000000000000000000000000000000000000000000000000000000060f883901b16610180526040516001600160a01b038216907fde72fc29218361f33503847e6f32be813f9ec92fc7c772bb59e46675c890fd0e90620002dd90879087908790620004fc565b60405180910390a25050505050505050620005bf565b82805462000301906200056c565b90600052602060002090601f01602090048101928262000325576000855562000370565b82601f106200034057805160ff191683800117855562000370565b8280016001018555821562000370579182015b828111156200037057825182559160200191906001019062000353565b506200037e92915062000382565b5090565b5b808211156200037e576000815560010162000383565b600082601f830112620003ab57600080fd5b81516001600160401b0380821115620003c857620003c8620005a9565b604051601f8301601f19908116603f01168101908282118183101715620003f357620003f3620005a9565b816040528381528660208588010111156200040d57600080fd5b6200042084602083016020890162000539565b9695505050505050565b600080600080608085870312156200044157600080fd5b84516001600160401b03808211156200045957600080fd5b620004678883890162000399565b955060208701519150808211156200047e57600080fd5b506200048d8782880162000399565b935050604085015160ff81168114620004a557600080fd5b60608601519092506001600160a01b0381168114620004c357600080fd5b939692955090935050565b60008151808452620004e881602086016020860162000539565b601f01601f19169290920160200192915050565b606081526000620005116060830186620004ce565b8281036020840152620005258186620004ce565b91505060ff83166040830152949350505050565b60005b83811015620005565781810151838201526020016200053c565b8381111562000566576000848401525b50505050565b600181811c908216806200058157607f821691505b60208210811415620005a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160601c60e0516101005161012051610140516101605160601c6101805160f81c6101a0516136ac620006606000396000610d600152600061031b0152600081816105920152818161077a015281816108d001528181610a6e0152610c95015260006110850152600061169d015260006116ec015260006116c7015260006116200152600061164a0152600061167401526136ac6000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806368c7fd571161010f57806395d89b41116100a2578063a9059cbb11610071578063a9059cbb1461052e578063d505accf14610541578063dd62ed3e14610554578063f77c47911461058d57600080fd5b806395d89b41146104ed57806398b16f36146104f55780639ecb037014610508578063a457c2d71461051b57600080fd5b80638d22ea2a116100de5780638d22ea2a1461046d5780638e6d536a146104b457806390596dd1146104c7578063919974dc146104da57600080fd5b806368c7fd571461040b57806370a082311461041e5780637ecebe001461044757806385beb5f11461045a57600080fd5b806333e39b61116101875780635c19a95c116101565780635c19a95c146103b25780635d7b0758146103c5578063613ed6bd146103d8578063631b5dfb146103f857600080fd5b806333e39b61146103455780633644e5151461035a57806336bb2a3814610362578063395093511461039f57600080fd5b806323b872dd116101c357806323b872dd1461023d5780632aceb534146102505780632d0dd68614610301578063313ce5671461031457600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26105b4565b6040516101ff919061339d565b60405180910390f35b61021b6102163660046131f9565b610646565b60405190151581526020016101ff565b6002545b6040519081526020016101ff565b61021b61024b366004612fe2565b61065d565b6102c961025e366004612f94565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600682529282902082519384018352546001600160d01b038116845262ffffff600160d01b8204811692850192909252600160e81b9004169082015290565b6040805182516001600160d01b0316815260208084015162ffffff9081169183019190915292820151909216908201526060016101ff565b61022f61030f36600461333e565b610723565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b610358610353366004612faf565b61076f565b005b61022f6107f5565b6103756103703660046131bb565b610804565b6040805182516001600160e01b0316815260209283015163ffffffff1692810192909252016101ff565b61021b6103ad3660046131f9565b61087c565b6103586103c0366004612f94565b6108b8565b6103586103d33660046131f9565b6108c5565b6103eb6103e63660046130e7565b610947565b6040516101ff9190613359565b610358610406366004612fe2565b610a63565b6103eb61041936600461313a565b610b3c565b61022f61042c366004612f94565b6001600160a01b031660009081526020819052604090205490565b61022f610455366004612f94565b610b6e565b6103eb610468366004613290565b610b8c565b61049c61047b366004612f94565b6001600160a01b039081166000908152630100000760205260409020541690565b6040516001600160a01b0390911681526020016101ff565b6103eb6104c23660046132d2565b610c6f565b6103586104d53660046131f9565b610c8a565b6103586104e8366004613088565b610d0c565b6101f2610e8c565b61022f61050336600461324d565b610e9b565b61022f610516366004613223565b610f0c565b61021b6105293660046131f9565b610f73565b61021b61053c3660046131f9565b611024565b61035861054f36600461301e565b611031565b61022f610562366004612faf565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61049c7f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546105c39061355a565b80601f01602080910402602001604051908101604052809291908181526020018280546105ef9061355a565b801561063c5780601f106106115761010080835404028352916020019161063c565b820191906000526020600020905b81548152906001019060200180831161061f57829003601f168201915b5050505050905090565b6000610653338484611195565b5060015b92915050565b600061066a8484846112ed565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107095760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107168533858403611195565b60019150505b9392505050565b604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090610657906008908442611511565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107e75760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b6107f1828261153d565b5050565b60006107ff611613565b905090565b60408051808201909152600080825260208201526001600160a01b038316600090815260066020526040902060010161ffff831662ffffff811061084a5761084a61361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201529392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106539185906108b390869061345d565b611195565b6108c2338261153d565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461093d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b6107f1828261173a565b60608160008167ffffffffffffffff81111561096557610965613634565b60405190808252806020026020018201604052801561098e578160200160208202803683370190505b506001600160a01b0387166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b900490931691830191909152929350905b84811015610a5657610a2783600101838a8a85818110610a0c57610a0c61361e565b9050602002016020810190610a21919061333e565b42611511565b848281518110610a3957610a3961361e565b602090810291909101015280610a4e8161358f565b9150506109ea565b5091979650505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610adb5760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b816001600160a01b0316836001600160a01b031614610b2d576001600160a01b03828116600090815260016020908152604080832093871683529290522054610b2d90839085906108b3908590613526565b610b378282611825565b505050565b6001600160a01b0385166000908152600660205260409020606090610b6490868686866119b6565b9695505050505050565b6001600160a01b038116600090815260056020526040812054610657565b60608160008167ffffffffffffffff811115610baa57610baa613634565b604051908082528060200260200182016040528015610bd3578160200160208202803683370190505b50604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915290915060005b83811015610c6457610c35600883898985818110610a0c57610a0c61361e565b838281518110610c4757610c4761361e565b602090810291909101015280610c5c8161358f565b915050610c15565b509095945050505050565b6060610c7f6007868686866119b6565b90505b949350505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d025760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b6107f18282611825565b83421115610d5c5760405162461bcd60e51b815260206004820181905260248201527f5469636b65742f64656c65676174652d657870697265642d646561646c696e656044820152606401610700565b60007f00000000000000000000000000000000000000000000000000000000000000008787610d8a8a611b55565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810186905260c0016040516020818303038152906040528051906020012090506000610dde82611b7d565b90506000610dee82878787611be6565b9050886001600160a01b0316816001600160a01b031614610e775760405162461bcd60e51b815260206004820152602160248201527f5469636b65742f64656c65676174652d696e76616c69642d7369676e6174757260448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610700565b610e81898961153d565b505050505050505050565b6060600480546105c39061355a565b6001600160a01b0383166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b90049093169183019190915290610f03906001830190868642611c0e565b95945050505050565b6001600160a01b0382166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b90049093169183019190915290610c829060018301908542611511565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561100d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610700565b61101a3385858403611195565b5060019392505050565b60006106533384846112ed565b834211156110815760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610700565b60007f00000000000000000000000000000000000000000000000000000000000000008888886110b08c611b55565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061110b82611b7d565b9050600061111b82878787611be6565b9050896001600160a01b0316816001600160a01b03161461117e5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610700565b6111898a8a8a611195565b50505050505050505050565b6001600160a01b0383166112105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b03821661128c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113695760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b0382166113e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610700565b6113f0838383611c46565b6001600160a01b0383166000908152602081905260409020548181101561147f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906114b690849061345d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150291815260200190565b60405180910390a35b50505050565b6000808263ffffffff168463ffffffff161161152d578361152f565b825b9050610b6486868386611cd9565b6001600160a01b038281166000908152602081815260408083205463010000079092529091205490919081169083168114156115795750505050565b6001600160a01b03848116600090815263010000076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169185169190911790556115cd818484611df2565b826001600160a01b0316846001600160a01b03167f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea260405160405180910390a350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561166c57507f000000000000000000000000000000000000000000000000000000000000000046145b1561169657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b0382166117905760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610700565b61179c60008383611c46565b80600260008282546117ae919061345d565b90915550506001600160a01b038216600090815260208190526040812080548392906117db90849061345d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166118a15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610700565b6118ad82600083611c46565b6001600160a01b0382166000908152602081905260409020548181101561193c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b038316600090815260208190526040812083830390556002805484929061196b908490613526565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606083828114611a2e5760405162461bcd60e51b815260206004820152602360248201527f5469636b65742f73746172742d656e642d74696d65732d6c656e6774682d6d6160448201527f74636800000000000000000000000000000000000000000000000000000000006064820152608401610700565b6040805160608101825288546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915260008267ffffffffffffffff811115611a8357611a83613634565b604051908082528060200260200182016040528015611aac578160200160208202803683370190505b5090504260005b84811015611b4657611b178b600101858c8c85818110611ad557611ad561361e565b9050602002016020810190611aea919061333e565b8b8b86818110611afc57611afc61361e565b9050602002016020810190611b11919061333e565b86611c0e565b838281518110611b2957611b2961361e565b602090810291909101015280611b3e8161358f565b915050611ab3565b50909998505050505050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b6000610657611b8a611613565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611bf787878787611e52565b91509150611c0481611f3f565b5095945050505050565b6000808263ffffffff168463ffffffff1611611c2a5783611c2c565b825b9050611c3b8787878487612130565b979650505050505050565b816001600160a01b0316836001600160a01b03161415611c6557505050565b60006001600160a01b03841615611c9657506001600160a01b03808416600090815263010000076020526040902054165b60006001600160a01b03841615611cc757506001600160a01b03808416600090815263010000076020526040902054165b611cd2828285611df2565b5050505050565b604080518082019091526000808252602082018190529081906040805180820190915260008082526020820152611d1088886121cc565b60208101519194509150611d319063ffffffff908116908890889061224c16565b15611d4c57505084516001600160d01b03169150610c829050565b6000611d58898961231d565b6020810151909350909150611d799063ffffffff808a169190899061239a16565b15611d8b576000945050505050610c82565b611d9d8985838a8c604001518b612469565b8094508193505050611db88360200151836020015188612636565b63ffffffff1682600001518460000151611dd291906134fe565b611ddc9190613495565b6001600160e01b03169998505050505050505050565b6001600160a01b03831615611e2257611e0b8382612700565b6001600160a01b038216611e2257611e2281612855565b6001600160a01b03821615610b3757611e3b828261296e565b6001600160a01b038316610b3757610b37816129a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e895750600090506003611f36565b8460ff16601b14158015611ea157508460ff16601c14155b15611eb25750600090506004611f36565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f06573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f2f57600060019250925050611f36565b9150600090505b94509492505050565b6000816004811115611f5357611f53613608565b1415611f5c5750565b6001816004811115611f7057611f70613608565b1415611fbe5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610700565b6002816004811115611fd257611fd2613608565b14156120205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610700565b600381600481111561203457612034613608565b14156120a85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610700565b60048160048111156120bc576120bc613608565b14156108c25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610700565b600080600061213f888861231d565b915091506000806121508a8a6121cc565b9150915060006121668b8b8487878a8f8e6129c0565b9050600061217a8c8c8588888b8f8f6129c0565b905061218f816020015183602001518a612636565b63ffffffff16826000015182600001516121a991906134fe565b6121b39190613495565b6001600160e01b03169c9b505050505050505050505050565b60408051808201909152600080825260208201819052906121fb836020015162ffffff1662ffffff8016612b0a565b9150838262ffffff1662ffffff81106122165761221661361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820152919491935090915050565b60008163ffffffff168463ffffffff161115801561227657508163ffffffff168363ffffffff1611155b15612292578263ffffffff168463ffffffff161115905061071c565b60008263ffffffff168563ffffffff16116122c1576122bc63ffffffff8616640100000000613475565b6122c9565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff1611612301576122fc63ffffffff8616640100000000613475565b612309565b8463ffffffff165b64ffffffffff169091111595945050505050565b604080518082019091526000808252602082018190529082602001519150838262ffffff1662ffffff81106123545761235461361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820181905290915061239357600091508382612216565b9250929050565b60008163ffffffff168463ffffffff16111580156123c457508163ffffffff168363ffffffff1611155b156123df578263ffffffff168463ffffffff1610905061071c565b60008263ffffffff168563ffffffff161161240e5761240963ffffffff8616640100000000613475565b612416565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff161161244e5761244963ffffffff8616640100000000613475565b612456565b8463ffffffff165b64ffffffffff1690911095945050505050565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260008662ffffff1690506000818962ffffff16106124b4578862ffffff166124cf565b60016124c562ffffff88168461345d565b6124cf9190613526565b905060005b60026124e0838561345d565b6124ea91906134bb565b90508a6124fc828962ffffff16612b34565b62ffffff1662ffffff81106125135761251361361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16602082018190529095508061255b5761255382600161345d565b9350506124d4565b8b61256b838a62ffffff16612b40565b62ffffff1662ffffff81106125825761258261361e565b604080518082019091529101546001600160e01b038116825263ffffffff600160e01b909104811660208301529095506000906125c790838116908c908b9061224c16565b90508080156125f057506125f08660200151898c63ffffffff1661224c9092919063ffffffff16565b156125fc575050612628565b806126135761260c600184613526565b9350612621565b61261e83600161345d565b94505b50506124d4565b505050965096945050505050565b60008163ffffffff168463ffffffff161115801561266057508163ffffffff168363ffffffff1611155b156126765761266f838561353d565b905061071c565b60008263ffffffff168563ffffffff16116126a5576126a063ffffffff8616640100000000613475565b6126ad565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116126e5576126e063ffffffff8616640100000000613475565b6126ed565b8463ffffffff165b64ffffffffff169050610b648183613526565b80612709575050565b6001600160a01b038216600090815260066020526040812090808061276d8461273187612b50565b6040518060400160405280601b81526020017f5469636b65742f747761622d6275726e2d6c742d62616c616e6365000000000081525042612bd3565b82518754602085015160408601516001600160d01b039093167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919092160217875591945092509050801561284d576040805183516001600160e01b0316815260208085015163ffffffff16908201526001600160a01b038816917fdd3e7cd3a260a292b0b3306b2ca62f30a7349619a9d09c58109318774c6b627d910160405180910390a25b505050505050565b8061285d5750565b600080600061288f600761287086612b50565b6040518060600160405280602c815260200161364b602c913942612bd3565b825160078054602086015160408701516001600160d01b039094167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919093160291909117905591945092509050801561150b576040805183516001600160e01b0316815260208085015163ffffffff16908201527f3375b905d617084fa6b7531688cc8046feb1f1a0b8ba2273de03c59d8d84416c910160405180910390a150505050565b80612977575050565b6001600160a01b038216600090815260066020526040812090808061276d8461299f87612b50565b42612c97565b806129ad5750565b600080600061288f600761299f86612b50565b60408051808201909152600080825260208201526129f38383896020015163ffffffff1661239a9092919063ffffffff16565b15612a1757612a108789600001516001600160d01b031685612d40565b9050612afe565b8263ffffffff16876020015163ffffffff161415612a36575085612afe565b8263ffffffff16866020015163ffffffff161415612a55575084612afe565b612a748660200151838563ffffffff1661239a9092919063ffffffff16565b15612a995750604080518082019091526000815263ffffffff83166020820152612afe565b600080612aae8b8888888e6040015189612469565b915091506000612ac78260200151846020015187612636565b63ffffffff1683600001518360000151612ae191906134fe565b612aeb9190613495565b9050612af8838288612d40565b93505050505b98975050505050505050565b600081612b1957506000610657565b61071c6001612b28848661345d565b612b329190613526565b835b600061071c82846135c8565b600061071c612b3284600161345d565b60006001600160d01b03821115612bcf5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f30382062697473000000000000000000000000000000000000000000000000006064820152608401610700565b5090565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825287546001600160d01b0380821680845262ffffff600160d01b840481166020860152600160e81b9093049092169383019390935260009287919089161115612c695760405162461bcd60e51b8152600401610700919061339d565b50612c78886001018287612dbb565b8251999099036001600160d01b03168252909990985095505050505050565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825286546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090612d13600188018287612dbb565b83519296509094509250612d289087906133f2565b6001600160d01b031684525091959094509092509050565b60408051808201909152600080825260208201526040518060400160405280612d7e8660200151858663ffffffff166126369092919063ffffffff16565b612d8e9063ffffffff16866134cf565b8651612d9a919061341d565b6001600160e01b031681526020018363ffffffff1681525090509392505050565b60408051606081018252600080825260208201819052918101919091526040805180820190915260008082526020820152600080612df987876121cc565b9150508463ffffffff16816020015163ffffffff161415612e2257859350915060009050612e99565b6000612e3c8288600001516001600160d01b031688612d40565b90508088886020015162ffffff1662ffffff8110612e5c57612e5c61361e565b825160209093015163ffffffff16600160e01b026001600160e01b03909316929092179101556000612e8d88612ea2565b95509093506001925050505b93509350939050565b60408051606081018252600080825260208083018290529282015290820151612ed29062ffffff90811690612b40565b62ffffff9081166020840152604083015181161015612bcf57600182604001818151612efe919061343f565b62ffffff169052505090565b80356001600160a01b0381168114612f2157600080fd5b919050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b6020830191508360208260051b850101111561239357600080fd5b803567ffffffffffffffff81168114612f2157600080fd5b803560ff81168114612f2157600080fd5b600060208284031215612fa657600080fd5b61071c82612f0a565b60008060408385031215612fc257600080fd5b612fcb83612f0a565b9150612fd960208401612f0a565b90509250929050565b600080600060608486031215612ff757600080fd5b61300084612f0a565b925061300e60208501612f0a565b9150604084013590509250925092565b600080600080600080600060e0888a03121561303957600080fd5b61304288612f0a565b965061305060208901612f0a565b9550604088013594506060880135935061306c60808901612f83565b925060a0880135915060c0880135905092959891949750929550565b60008060008060008060c087890312156130a157600080fd5b6130aa87612f0a565b95506130b860208801612f0a565b9450604087013593506130cd60608801612f83565b92506080870135915060a087013590509295509295509295565b6000806000604084860312156130fc57600080fd5b61310584612f0a565b9250602084013567ffffffffffffffff81111561312157600080fd5b61312d86828701612f26565b9497909650939450505050565b60008060008060006060868803121561315257600080fd5b61315b86612f0a565b9450602086013567ffffffffffffffff8082111561317857600080fd5b61318489838a01612f26565b9096509450604088013591508082111561319d57600080fd5b506131aa88828901612f26565b969995985093965092949392505050565b600080604083850312156131ce57600080fd5b6131d783612f0a565b9150602083013561ffff811681146131ee57600080fd5b809150509250929050565b6000806040838503121561320c57600080fd5b61321583612f0a565b946020939093013593505050565b6000806040838503121561323657600080fd5b61323f83612f0a565b9150612fd960208401612f6b565b60008060006060848603121561326257600080fd5b61326b84612f0a565b925061327960208501612f6b565b915061328760408501612f6b565b90509250925092565b600080602083850312156132a357600080fd5b823567ffffffffffffffff8111156132ba57600080fd5b6132c685828601612f26565b90969095509350505050565b600080600080604085870312156132e857600080fd5b843567ffffffffffffffff8082111561330057600080fd5b61330c88838901612f26565b9096509450602087013591508082111561332557600080fd5b5061333287828801612f26565b95989497509550505050565b60006020828403121561335057600080fd5b61071c82612f6b565b6020808252825182820181905260009190848201906040850190845b8181101561339157835183529284019291840191600101613375565b50909695505050505050565b600060208083528351808285015260005b818110156133ca578581018301518582016040015282016133ae565b818111156133dc576000604083870101525b50601f01601f1916929092016040019392505050565b60006001600160d01b03808316818516808303821115613414576134146135dc565b01949350505050565b60006001600160e01b03808316818516808303821115613414576134146135dc565b600062ffffff808316818516808303821115613414576134146135dc565b60008219821115613470576134706135dc565b500190565b600064ffffffffff808316818516808303821115613414576134146135dc565b60006001600160e01b03808416806134af576134af6135f2565b92169190910492915050565b6000826134ca576134ca6135f2565b500490565b60006001600160e01b03808316818516818304811182151516156134f5576134f56135dc565b02949350505050565b60006001600160e01b038381169083168181101561351e5761351e6135dc565b039392505050565b600082821015613538576135386135dc565b500390565b600063ffffffff8381169083168181101561351e5761351e6135dc565b600181811c9082168061356e57607f821691505b60208210811415611b7757634e487b7160e01b600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135c1576135c16135dc565b5060010190565b6000826135d7576135d76135f2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5469636b65742f6275726e2d616d6f756e742d657863656564732d746f74616c2d737570706c792d74776162a2646970667358221220f56506ec2cbe003727b9a34cab89f925ea92006fe544b652e08d6aac234f29d964736f6c63430008060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806368c7fd571161010f57806395d89b41116100a2578063a9059cbb11610071578063a9059cbb1461052e578063d505accf14610541578063dd62ed3e14610554578063f77c47911461058d57600080fd5b806395d89b41146104ed57806398b16f36146104f55780639ecb037014610508578063a457c2d71461051b57600080fd5b80638d22ea2a116100de5780638d22ea2a1461046d5780638e6d536a146104b457806390596dd1146104c7578063919974dc146104da57600080fd5b806368c7fd571461040b57806370a082311461041e5780637ecebe001461044757806385beb5f11461045a57600080fd5b806333e39b61116101875780635c19a95c116101565780635c19a95c146103b25780635d7b0758146103c5578063613ed6bd146103d8578063631b5dfb146103f857600080fd5b806333e39b61146103455780633644e5151461035a57806336bb2a3814610362578063395093511461039f57600080fd5b806323b872dd116101c357806323b872dd1461023d5780632aceb534146102505780632d0dd68614610301578063313ce5671461031457600080fd5b806306fdde03146101ea578063095ea7b31461020857806318160ddd1461022b575b600080fd5b6101f26105b4565b6040516101ff919061339d565b60405180910390f35b61021b6102163660046131f9565b610646565b60405190151581526020016101ff565b6002545b6040519081526020016101ff565b61021b61024b366004612fe2565b61065d565b6102c961025e366004612f94565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600682529282902082519384018352546001600160d01b038116845262ffffff600160d01b8204811692850192909252600160e81b9004169082015290565b6040805182516001600160d01b0316815260208084015162ffffff9081169183019190915292820151909216908201526060016101ff565b61022f61030f36600461333e565b610723565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101ff565b610358610353366004612faf565b61076f565b005b61022f6107f5565b6103756103703660046131bb565b610804565b6040805182516001600160e01b0316815260209283015163ffffffff1692810192909252016101ff565b61021b6103ad3660046131f9565b61087c565b6103586103c0366004612f94565b6108b8565b6103586103d33660046131f9565b6108c5565b6103eb6103e63660046130e7565b610947565b6040516101ff9190613359565b610358610406366004612fe2565b610a63565b6103eb61041936600461313a565b610b3c565b61022f61042c366004612f94565b6001600160a01b031660009081526020819052604090205490565b61022f610455366004612f94565b610b6e565b6103eb610468366004613290565b610b8c565b61049c61047b366004612f94565b6001600160a01b039081166000908152630100000760205260409020541690565b6040516001600160a01b0390911681526020016101ff565b6103eb6104c23660046132d2565b610c6f565b6103586104d53660046131f9565b610c8a565b6103586104e8366004613088565b610d0c565b6101f2610e8c565b61022f61050336600461324d565b610e9b565b61022f610516366004613223565b610f0c565b61021b6105293660046131f9565b610f73565b61021b61053c3660046131f9565b611024565b61035861054f36600461301e565b611031565b61022f610562366004612faf565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61049c7f000000000000000000000000000000000000000000000000000000000000000081565b6060600380546105c39061355a565b80601f01602080910402602001604051908101604052809291908181526020018280546105ef9061355a565b801561063c5780601f106106115761010080835404028352916020019161063c565b820191906000526020600020905b81548152906001019060200180831161061f57829003601f168201915b5050505050905090565b6000610653338484611195565b5060015b92915050565b600061066a8484846112ed565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107095760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6107168533858403611195565b60019150505b9392505050565b604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090610657906008908442611511565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107e75760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b6107f1828261153d565b5050565b60006107ff611613565b905090565b60408051808201909152600080825260208201526001600160a01b038316600090815260066020526040902060010161ffff831662ffffff811061084a5761084a61361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201529392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106539185906108b390869061345d565b611195565b6108c2338261153d565b50565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461093d5760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b6107f1828261173a565b60608160008167ffffffffffffffff81111561096557610965613634565b60405190808252806020026020018201604052801561098e578160200160208202803683370190505b506001600160a01b0387166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b900490931691830191909152929350905b84811015610a5657610a2783600101838a8a85818110610a0c57610a0c61361e565b9050602002016020810190610a21919061333e565b42611511565b848281518110610a3957610a3961361e565b602090810291909101015280610a4e8161358f565b9150506109ea565b5091979650505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610adb5760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b816001600160a01b0316836001600160a01b031614610b2d576001600160a01b03828116600090815260016020908152604080832093871683529290522054610b2d90839085906108b3908590613526565b610b378282611825565b505050565b6001600160a01b0385166000908152600660205260409020606090610b6490868686866119b6565b9695505050505050565b6001600160a01b038116600090815260056020526040812054610657565b60608160008167ffffffffffffffff811115610baa57610baa613634565b604051908082528060200260200182016040528015610bd3578160200160208202803683370190505b50604080516060810182526007546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915290915060005b83811015610c6457610c35600883898985818110610a0c57610a0c61361e565b838281518110610c4757610c4761361e565b602090810291909101015280610c5c8161358f565b915050610c15565b509095945050505050565b6060610c7f6007868686866119b6565b90505b949350505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d025760405162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c6572006044820152606401610700565b6107f18282611825565b83421115610d5c5760405162461bcd60e51b815260206004820181905260248201527f5469636b65742f64656c65676174652d657870697265642d646561646c696e656044820152606401610700565b60007f00000000000000000000000000000000000000000000000000000000000000008787610d8a8a611b55565b6040805160208101959095526001600160a01b039384169085015291166060830152608082015260a0810186905260c0016040516020818303038152906040528051906020012090506000610dde82611b7d565b90506000610dee82878787611be6565b9050886001600160a01b0316816001600160a01b031614610e775760405162461bcd60e51b815260206004820152602160248201527f5469636b65742f64656c65676174652d696e76616c69642d7369676e6174757260448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610700565b610e81898961153d565b505050505050505050565b6060600480546105c39061355a565b6001600160a01b0383166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b90049093169183019190915290610f03906001830190868642611c0e565b95945050505050565b6001600160a01b0382166000908152600660209081526040808320815160608101835281546001600160d01b038116825262ffffff600160d01b8204811695830195909552600160e81b90049093169183019190915290610c829060018301908542611511565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561100d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610700565b61101a3385858403611195565b5060019392505050565b60006106533384846112ed565b834211156110815760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610700565b60007f00000000000000000000000000000000000000000000000000000000000000008888886110b08c611b55565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061110b82611b7d565b9050600061111b82878787611be6565b9050896001600160a01b0316816001600160a01b03161461117e5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610700565b6111898a8a8a611195565b50505050505050505050565b6001600160a01b0383166112105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b03821661128c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166113695760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b0382166113e55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610700565b6113f0838383611c46565b6001600160a01b0383166000908152602081905260409020548181101561147f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906114b690849061345d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150291815260200190565b60405180910390a35b50505050565b6000808263ffffffff168463ffffffff161161152d578361152f565b825b9050610b6486868386611cd9565b6001600160a01b038281166000908152602081815260408083205463010000079092529091205490919081169083168114156115795750505050565b6001600160a01b03848116600090815263010000076020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169185169190911790556115cd818484611df2565b826001600160a01b0316846001600160a01b03167f4bc154dd35d6a5cb9206482ecb473cdbf2473006d6bce728b9cc0741bcc59ea260405160405180910390a350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561166c57507f000000000000000000000000000000000000000000000000000000000000000046145b1561169657507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6001600160a01b0382166117905760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610700565b61179c60008383611c46565b80600260008282546117ae919061345d565b90915550506001600160a01b038216600090815260208190526040812080548392906117db90849061345d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0382166118a15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610700565b6118ad82600083611c46565b6001600160a01b0382166000908152602081905260409020548181101561193c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610700565b6001600160a01b038316600090815260208190526040812083830390556002805484929061196b908490613526565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b606083828114611a2e5760405162461bcd60e51b815260206004820152602360248201527f5469636b65742f73746172742d656e642d74696d65732d6c656e6774682d6d6160448201527f74636800000000000000000000000000000000000000000000000000000000006064820152608401610700565b6040805160608101825288546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b909104169181019190915260008267ffffffffffffffff811115611a8357611a83613634565b604051908082528060200260200182016040528015611aac578160200160208202803683370190505b5090504260005b84811015611b4657611b178b600101858c8c85818110611ad557611ad561361e565b9050602002016020810190611aea919061333e565b8b8b86818110611afc57611afc61361e565b9050602002016020810190611b11919061333e565b86611c0e565b838281518110611b2957611b2961361e565b602090810291909101015280611b3e8161358f565b915050611ab3565b50909998505050505050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b6000610657611b8a611613565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611bf787878787611e52565b91509150611c0481611f3f565b5095945050505050565b6000808263ffffffff168463ffffffff1611611c2a5783611c2c565b825b9050611c3b8787878487612130565b979650505050505050565b816001600160a01b0316836001600160a01b03161415611c6557505050565b60006001600160a01b03841615611c9657506001600160a01b03808416600090815263010000076020526040902054165b60006001600160a01b03841615611cc757506001600160a01b03808416600090815263010000076020526040902054165b611cd2828285611df2565b5050505050565b604080518082019091526000808252602082018190529081906040805180820190915260008082526020820152611d1088886121cc565b60208101519194509150611d319063ffffffff908116908890889061224c16565b15611d4c57505084516001600160d01b03169150610c829050565b6000611d58898961231d565b6020810151909350909150611d799063ffffffff808a169190899061239a16565b15611d8b576000945050505050610c82565b611d9d8985838a8c604001518b612469565b8094508193505050611db88360200151836020015188612636565b63ffffffff1682600001518460000151611dd291906134fe565b611ddc9190613495565b6001600160e01b03169998505050505050505050565b6001600160a01b03831615611e2257611e0b8382612700565b6001600160a01b038216611e2257611e2281612855565b6001600160a01b03821615610b3757611e3b828261296e565b6001600160a01b038316610b3757610b37816129a5565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e895750600090506003611f36565b8460ff16601b14158015611ea157508460ff16601c14155b15611eb25750600090506004611f36565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f06573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f2f57600060019250925050611f36565b9150600090505b94509492505050565b6000816004811115611f5357611f53613608565b1415611f5c5750565b6001816004811115611f7057611f70613608565b1415611fbe5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610700565b6002816004811115611fd257611fd2613608565b14156120205760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610700565b600381600481111561203457612034613608565b14156120a85760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610700565b60048160048111156120bc576120bc613608565b14156108c25760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610700565b600080600061213f888861231d565b915091506000806121508a8a6121cc565b9150915060006121668b8b8487878a8f8e6129c0565b9050600061217a8c8c8588888b8f8f6129c0565b905061218f816020015183602001518a612636565b63ffffffff16826000015182600001516121a991906134fe565b6121b39190613495565b6001600160e01b03169c9b505050505050505050505050565b60408051808201909152600080825260208201819052906121fb836020015162ffffff1662ffffff8016612b0a565b9150838262ffffff1662ffffff81106122165761221661361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820152919491935090915050565b60008163ffffffff168463ffffffff161115801561227657508163ffffffff168363ffffffff1611155b15612292578263ffffffff168463ffffffff161115905061071c565b60008263ffffffff168563ffffffff16116122c1576122bc63ffffffff8616640100000000613475565b6122c9565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff1611612301576122fc63ffffffff8616640100000000613475565b612309565b8463ffffffff165b64ffffffffff169091111595945050505050565b604080518082019091526000808252602082018190529082602001519150838262ffffff1662ffffff81106123545761235461361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820181905290915061239357600091508382612216565b9250929050565b60008163ffffffff168463ffffffff16111580156123c457508163ffffffff168363ffffffff1611155b156123df578263ffffffff168463ffffffff1610905061071c565b60008263ffffffff168563ffffffff161161240e5761240963ffffffff8616640100000000613475565b612416565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff161161244e5761244963ffffffff8616640100000000613475565b612456565b8463ffffffff165b64ffffffffff1690911095945050505050565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260008662ffffff1690506000818962ffffff16106124b4578862ffffff166124cf565b60016124c562ffffff88168461345d565b6124cf9190613526565b905060005b60026124e0838561345d565b6124ea91906134bb565b90508a6124fc828962ffffff16612b34565b62ffffff1662ffffff81106125135761251361361e565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff16602082018190529095508061255b5761255382600161345d565b9350506124d4565b8b61256b838a62ffffff16612b40565b62ffffff1662ffffff81106125825761258261361e565b604080518082019091529101546001600160e01b038116825263ffffffff600160e01b909104811660208301529095506000906125c790838116908c908b9061224c16565b90508080156125f057506125f08660200151898c63ffffffff1661224c9092919063ffffffff16565b156125fc575050612628565b806126135761260c600184613526565b9350612621565b61261e83600161345d565b94505b50506124d4565b505050965096945050505050565b60008163ffffffff168463ffffffff161115801561266057508163ffffffff168363ffffffff1611155b156126765761266f838561353d565b905061071c565b60008263ffffffff168563ffffffff16116126a5576126a063ffffffff8616640100000000613475565b6126ad565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116126e5576126e063ffffffff8616640100000000613475565b6126ed565b8463ffffffff165b64ffffffffff169050610b648183613526565b80612709575050565b6001600160a01b038216600090815260066020526040812090808061276d8461273187612b50565b6040518060400160405280601b81526020017f5469636b65742f747761622d6275726e2d6c742d62616c616e6365000000000081525042612bd3565b82518754602085015160408601516001600160d01b039093167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919092160217875591945092509050801561284d576040805183516001600160e01b0316815260208085015163ffffffff16908201526001600160a01b038816917fdd3e7cd3a260a292b0b3306b2ca62f30a7349619a9d09c58109318774c6b627d910160405180910390a25b505050505050565b8061285d5750565b600080600061288f600761287086612b50565b6040518060600160405280602c815260200161364b602c913942612bd3565b825160078054602086015160408701516001600160d01b039094167fffffff000000000000000000000000000000000000000000000000000000000090921691909117600160d01b62ffffff92831602177cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b919093160291909117905591945092509050801561150b576040805183516001600160e01b0316815260208085015163ffffffff16908201527f3375b905d617084fa6b7531688cc8046feb1f1a0b8ba2273de03c59d8d84416c910160405180910390a150505050565b80612977575050565b6001600160a01b038216600090815260066020526040812090808061276d8461299f87612b50565b42612c97565b806129ad5750565b600080600061288f600761299f86612b50565b60408051808201909152600080825260208201526129f38383896020015163ffffffff1661239a9092919063ffffffff16565b15612a1757612a108789600001516001600160d01b031685612d40565b9050612afe565b8263ffffffff16876020015163ffffffff161415612a36575085612afe565b8263ffffffff16866020015163ffffffff161415612a55575084612afe565b612a748660200151838563ffffffff1661239a9092919063ffffffff16565b15612a995750604080518082019091526000815263ffffffff83166020820152612afe565b600080612aae8b8888888e6040015189612469565b915091506000612ac78260200151846020015187612636565b63ffffffff1683600001518360000151612ae191906134fe565b612aeb9190613495565b9050612af8838288612d40565b93505050505b98975050505050505050565b600081612b1957506000610657565b61071c6001612b28848661345d565b612b329190613526565b835b600061071c82846135c8565b600061071c612b3284600161345d565b60006001600160d01b03821115612bcf5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f30382062697473000000000000000000000000000000000000000000000000006064820152608401610700565b5090565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825287546001600160d01b0380821680845262ffffff600160d01b840481166020860152600160e81b9093049092169383019390935260009287919089161115612c695760405162461bcd60e51b8152600401610700919061339d565b50612c78886001018287612dbb565b8251999099036001600160d01b03168252909990985095505050505050565b604080516060810182526000808252602082018190529181019190915260408051808201909152600080825260208201526040805160608101825286546001600160d01b038116825262ffffff600160d01b820481166020840152600160e81b9091041691810191909152600090612d13600188018287612dbb565b83519296509094509250612d289087906133f2565b6001600160d01b031684525091959094509092509050565b60408051808201909152600080825260208201526040518060400160405280612d7e8660200151858663ffffffff166126369092919063ffffffff16565b612d8e9063ffffffff16866134cf565b8651612d9a919061341d565b6001600160e01b031681526020018363ffffffff1681525090509392505050565b60408051606081018252600080825260208201819052918101919091526040805180820190915260008082526020820152600080612df987876121cc565b9150508463ffffffff16816020015163ffffffff161415612e2257859350915060009050612e99565b6000612e3c8288600001516001600160d01b031688612d40565b90508088886020015162ffffff1662ffffff8110612e5c57612e5c61361e565b825160209093015163ffffffff16600160e01b026001600160e01b03909316929092179101556000612e8d88612ea2565b95509093506001925050505b93509350939050565b60408051606081018252600080825260208083018290529282015290820151612ed29062ffffff90811690612b40565b62ffffff9081166020840152604083015181161015612bcf57600182604001818151612efe919061343f565b62ffffff169052505090565b80356001600160a01b0381168114612f2157600080fd5b919050565b60008083601f840112612f3857600080fd5b50813567ffffffffffffffff811115612f5057600080fd5b6020830191508360208260051b850101111561239357600080fd5b803567ffffffffffffffff81168114612f2157600080fd5b803560ff81168114612f2157600080fd5b600060208284031215612fa657600080fd5b61071c82612f0a565b60008060408385031215612fc257600080fd5b612fcb83612f0a565b9150612fd960208401612f0a565b90509250929050565b600080600060608486031215612ff757600080fd5b61300084612f0a565b925061300e60208501612f0a565b9150604084013590509250925092565b600080600080600080600060e0888a03121561303957600080fd5b61304288612f0a565b965061305060208901612f0a565b9550604088013594506060880135935061306c60808901612f83565b925060a0880135915060c0880135905092959891949750929550565b60008060008060008060c087890312156130a157600080fd5b6130aa87612f0a565b95506130b860208801612f0a565b9450604087013593506130cd60608801612f83565b92506080870135915060a087013590509295509295509295565b6000806000604084860312156130fc57600080fd5b61310584612f0a565b9250602084013567ffffffffffffffff81111561312157600080fd5b61312d86828701612f26565b9497909650939450505050565b60008060008060006060868803121561315257600080fd5b61315b86612f0a565b9450602086013567ffffffffffffffff8082111561317857600080fd5b61318489838a01612f26565b9096509450604088013591508082111561319d57600080fd5b506131aa88828901612f26565b969995985093965092949392505050565b600080604083850312156131ce57600080fd5b6131d783612f0a565b9150602083013561ffff811681146131ee57600080fd5b809150509250929050565b6000806040838503121561320c57600080fd5b61321583612f0a565b946020939093013593505050565b6000806040838503121561323657600080fd5b61323f83612f0a565b9150612fd960208401612f6b565b60008060006060848603121561326257600080fd5b61326b84612f0a565b925061327960208501612f6b565b915061328760408501612f6b565b90509250925092565b600080602083850312156132a357600080fd5b823567ffffffffffffffff8111156132ba57600080fd5b6132c685828601612f26565b90969095509350505050565b600080600080604085870312156132e857600080fd5b843567ffffffffffffffff8082111561330057600080fd5b61330c88838901612f26565b9096509450602087013591508082111561332557600080fd5b5061333287828801612f26565b95989497509550505050565b60006020828403121561335057600080fd5b61071c82612f6b565b6020808252825182820181905260009190848201906040850190845b8181101561339157835183529284019291840191600101613375565b50909695505050505050565b600060208083528351808285015260005b818110156133ca578581018301518582016040015282016133ae565b818111156133dc576000604083870101525b50601f01601f1916929092016040019392505050565b60006001600160d01b03808316818516808303821115613414576134146135dc565b01949350505050565b60006001600160e01b03808316818516808303821115613414576134146135dc565b600062ffffff808316818516808303821115613414576134146135dc565b60008219821115613470576134706135dc565b500190565b600064ffffffffff808316818516808303821115613414576134146135dc565b60006001600160e01b03808416806134af576134af6135f2565b92169190910492915050565b6000826134ca576134ca6135f2565b500490565b60006001600160e01b03808316818516818304811182151516156134f5576134f56135dc565b02949350505050565b60006001600160e01b038381169083168181101561351e5761351e6135dc565b039392505050565b600082821015613538576135386135dc565b500390565b600063ffffffff8381169083168181101561351e5761351e6135dc565b600181811c9082168061356e57607f821691505b60208210811415611b7757634e487b7160e01b600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135c1576135c16135dc565b5060010190565b6000826135d7576135d76135f2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe5469636b65742f6275726e2d616d6f756e742d657863656564732d746f74616c2d737570706c792d74776162a2646970667358221220f56506ec2cbe003727b9a34cab89f925ea92006fe544b652e08d6aac234f29d964736f6c63430008060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
