content: package com.alipay.antchain.bridge.plugins.fiscobcos.abi;
  
  import java.math.BigInteger;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collections;
  import java.util.List;
  import org.fisco.bcos.sdk.v3.client.Client;
  import org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Address;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Bool;
  import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray;
  import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes;
  import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicStruct;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
  import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
  import org.fisco.bcos.sdk.v3.contract.Contract;
  import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
  import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
  import org.fisco.bcos.sdk.v3.eventsub.EventSubCallback;
  import org.fisco.bcos.sdk.v3.model.CryptoType;
  import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
  import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
  import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;
  
  @SuppressWarnings("unchecked")
  public class PtcHub extends Contract {
      public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b50604051620082dc380380620082dc833981016040819052620000349162002097565b6200003f336200005b565b6200004a81620000ab565b620000546200022e565b506200237c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620000c382620002fa60201b6200187f1760201c565b9050600081604001516003811115620000e057620000e06200214f565b14620001335760405162461bcd60e51b815260206004820152601e60248201527f77726f6e67207479706520666f72206263646e7320726f6f742063657274000060448201526064015b60405180910390fd5b6000620001606200014f836200056660201b62001a471760201c565b620006b860201b62001b7a1760201c565b805190602001209050826001604051806040016040528060048152602001631c9bdbdd60e21b81525060405162000198919062002165565b90815260200160405180910390209080519060200190620001bb92919062001e6e565b5060408051808201825260048152631c9bdbdd60e21b602080830191825260008581526002909152929092209051620001f5929062001e6e565b506040518181527f7c787bfbe942686b5f41acec151012ca79c6b81c1c5a23cee512781cf3d5b9bb9060200160405180910390a1505050565b600054600160a81b900460ff16156200029a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016200012a565b60005460ff600160a01b90910481161015620002f8576000805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6200030462001efd565b6200030e62001efd565b60006200032684620007f060201b62001c711760201c565b905060005b8160200151518110156200055d5760008260200151828151811062000354576200035462002183565b60200260200101519050600061ffff16816000015161ffff16141562000392576200038a8162000a1b60201b62001e4c1760201c565b845262000547565b805161ffff1660011415620003c257620003b78162000a1b60201b62001e4c1760201c565b602085015262000547565b805161ffff16600214156200043657620003e78162000a2260201b62001e531760201c565b60ff166003811115620003fe57620003fe6200214f565b846040019060038111156200041757620004176200214f565b908160038111156200042d576200042d6200214f565b90525062000547565b805161ffff16600314156200047057620004656200045f8262000a1b60201b62001e4c1760201c565b62000a46565b606085015262000547565b805161ffff1660041415620004a957620004958162000b6360201b62001e641760201c565b6001600160401b0316608085015262000547565b805161ffff1660051415620004e257620004ce8162000b6360201b62001e641760201c565b6001600160401b031660a085015262000547565b805161ffff16600614156200051257620005078162000a1b60201b62001e4c1760201c565b60c085015262000547565b805161ffff16600714156200054757620005416200053b8262000a1b60201b62001e4c1760201c565b62000b96565b60e08501525b50806200055481620021af565b9150506200032b565b50909392505050565b6200057062001f83565b6000826040015160038111156200058b576200058b6200214f565b1415620005ac5760c0820151620005a29062000d13565b6020015192915050565b600182604001516003811115620005c757620005c76200214f565b1415620005e85760c0820151620005de9062000e20565b6080015192915050565b6002826040015160038111156200060357620006036200214f565b1415620006245760c08201516200061a9062001001565b6060015192915050565b6003826040015160038111156200063f576200063f6200214f565b1415620006605760c08201516200065690620011b2565b6040015192915050565b60405162461bcd60e51b815260206004820152602660248201527f676574436572744f776e65724f69643a20636572742074797065206e6f7420736044820152651d5c1c1bdc9d60d21b60648201526084016200012a565b604080516002808252606082810190935260009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620006d257905050905062000749600062000738856000015160018111156200072757620007276200214f565b620012ef60201b62001e7d1760201c565b6200130660201b62001e911760201c565b816000815181106200075f576200075f62002183565b602002602001018190525062000786600184602001516200138260201b62001efe1760201c565b816001815181106200079c576200079c62002183565b6020026020010181905250620007c96040518060400160405280600061ffff168152602001606081525090565b818160200181905250620007e881620013c560201b62001f411760201c565b949350505050565b604080518082019091526000815260606020820152600682511015620008595760405162461bcd60e51b815260206004820152601760248201527f696c6c6567616c207261772064617461206c656e67746800000000000000000060448201526064016200012a565b60408051808201909152600080825260606020830152906200089c6200088b85846200154460201b620020461760201c565b6200156f60201b6200206e1760201c565b61ffff168152620008af600683620021cd565b91506000825b85518110156200092d57620008f7620008e687620008d5846002620021cd565b6200161760201b6200210f1760201c565b6200164460201b620021391760201c565b62000904906006620021e8565b620009169063ffffffff1682620021cd565b9050816200092481620021af565b925050620008b5565b6000826001600160401b038111156200094a576200094a6200204e565b6040519080825280602002602001820160405280156200099957816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620009695790505b509050600092505b865185101562000a0c5760408051606080820183526000808352602083015291810191909152620009d388876200174b565b96509050808285620009e581620021af565b965081518110620009fa57620009fa62002183565b602002602001018190525050620009a1565b60208401525090949350505050565b6040015190565b600062000a4060018360400151620018d560201b620022331760201c565b92915050565b62000a5062001f83565b62000a5a62001f83565b600062000a7284620007f060201b62001c711760201c565b905060005b8160200151518110156200055d5760008260200151828151811062000aa05762000aa062002183565b60200260200101519050600061ffff16816000015161ffff16141562000b225762000ad68162000a2260201b62001e531760201c565b60ff16600181111562000aed5762000aed6200214f565b8490600181111562000b035762000b036200214f565b9081600181111562000b195762000b196200214f565b90525062000b4d565b805161ffff166001141562000b4d5762000b478162000a1b60201b62001e4c1760201c565b60208501525b508062000b5a81620021af565b91505062000a77565b600062000a4062000b8560088460400151620018d560201b620022331760201c565b620018da60201b620022381760201c565b62000bc26040518060800160405280606081526020016060815260200160608152602001606081525090565b62000bee6040518060800160405280606081526020016060815260200160608152602001606081525090565b600062000c0684620007f060201b62001c711760201c565b905060005b8160200151518110156200055d5760008260200151828151811062000c345762000c3462002183565b60200260200101519050600061ffff16816000015161ffff16141562000c725762000c6a8162000a1b60201b62001e4c1760201c565b845262000cfd565b805161ffff166001141562000ca25762000c978162000a1b60201b62001e4c1760201c565b602085015262000cfd565b805161ffff166002141562000cd25762000cc78162000a1b60201b62001e4c1760201c565b604085015262000cfd565b805161ffff166003141562000cfd5762000cf78162000a1b60201b62001e4c1760201c565b60608501525b508062000d0a81620021af565b91505062000c0b565b62000d1d62001f9e565b62000d2762001f9e565b600062000d3f84620007f060201b62001c711760201c565b905060005b8160200151518110156200055d5760008260200151828151811062000d6d5762000d6d62002183565b60200260200101519050600061ffff16816000015161ffff16141562000dab5762000da38162000a1b60201b62001e4c1760201c565b845262000e0a565b805161ffff166001141562000ddf5762000dd46200045f8262000a1b60201b62001e4c1760201c565b602085015262000e0a565b805161ffff166002141562000e0a5762000e048162000a1b60201b62001e4c1760201c565b60408501525b508062000e1781620021af565b91505062000d44565b62000e2a62001fba565b62000e3462001fba565b600062000e4c84620007f060201b62001c711760201c565b905060005b8160200151518110156200055d5760008260200151828151811062000e7a5762000e7a62002183565b60200260200101519050600061ffff16816000015161ffff16141562000eb85762000eb08162000a1b60201b62001e4c1760201c565b845262000feb565b805161ffff166001141562000f2c5762000edd8162000a2260201b62001e531760201c565b60ff16600181111562000ef45762000ef46200214f565b8460200190600181111562000f0d5762000f0d6200214f565b9081600181111562000f235762000f236200214f565b90525062000feb565b805161ffff166002141562000f5c5762000f518162000a1b60201b62001e4c1760201c565b604085015262000feb565b805161ffff166003141562000f8c5762000f818162000a1b60201b62001e4c1760201c565b606085015262000feb565b805161ffff166004141562000fc05762000fb56200045f8262000a1b60201b62001e4c1760201c565b608085015262000feb565b805161ffff166005141562000feb5762000fe58162000a1b60201b62001e4c1760201c565b60a08501525b508062000ff881620021af565b91505062000e51","565b6200100b62001fec565b6200101562001fec565b60006200102d84620007f060201b62001c711760201c565b905060005b8160200151518110156200055d576000826020015182815181106200105b576200105b62002183565b60200260200101519050600061ffff16816000015161ffff1614156200109957620010918162000a1b60201b62001e4c1760201c565b84526200119c565b805161ffff1660011415620010c957620010be8162000a1b60201b62001e4c1760201c565b60208501526200119c565b805161ffff16600214156200113d57620010ee8162000a2260201b62001e531760201c565b60ff1660028111156200110557620011056200214f565b846040019060028111156200111e576200111e6200214f565b908160028111156200113457620011346200214f565b9052506200119c565b805161ffff16600314156200117157620011666200045f8262000a1b60201b62001e4c1760201c565b60608501526200119c565b805161ffff16600414156200119c57620011968162000a1b60201b62001e4c1760201c565b60808501525b5080620011a981620021af565b91505062001032565b620011bc62002014565b620011c662002014565b6000620011de84620007f060201b62001c711760201c565b905060005b8160200151518110156200055d576000826020015182815181106200120c576200120c62002183565b60200260200101519050600061ffff16816000015161ffff1614156200124a57620012428162000a1b60201b62001e4c1760201c565b8452620012d9565b805161ffff16600114156200127a576200126f8162000a1b60201b62001e4c1760201c565b6020850152620012d9565b805161ffff1660031415620012ae57620012a36200045f8262000a1b60201b62001e4c1760201c565b6040850152620012d9565b805161ffff1660041415620012d957620012d38162000a1b60201b62001e4c1760201c565b60608501525b5080620012e681620021af565b915050620011e3565b600081600181111562000a405762000a406200214f565b6040805160608082018352600080835260208301819052828401919091528251600180825281850190945291929091906020820181803683370190505090506200135e6001848362001ab160201b620023f61760201c565b6040805160608101825261ffff959095168552600160208601528401525090919050565b60408051606080820183526000808352602083015291810191909152506040805160608101825261ffff939093168352815163ffffffff16602084015282015290565b60606000620013df8362001ac260201b620024071760201c565b90506000620013f0826006620021e8565b63ffffffff166001600160401b038111156200141057620014106200204e565b6040519080825280601f01601f1916602001820160405280156200143b576020820181803683370190505b5090506200147060026200145e86600001516200156f60201b6200206e1760201c565b8362001b5160201b6200247b1760201c565b6200149e60066200148c846200164460201b620021391760201c565b8362001b6260201b6200248c1760201c565b600660005b620014b98662001b7360201b6200249d1760201c565b8110156200153a576000620014f987602001518381518110620014e057620014e062002183565b602002602001015162001b7b60201b620024a51760201c565b90506200151383828662001c3d60201b620025341760201c565b8051620015219084620021cd565b92505080806200153190620021af565b915050620014a3565b5090949350505050565b815160009062001556836002620021cd565b11156200156257600080fd5b50016002015161ffff1690565b60408051600280825281830190925260009160f084901b9183916020820181803683370190505090508160011a60f81b81600081518110620015b557620015b562002183565b60200101906001600160f81b031916908160001a9053508160001a60f81b81600181518110620015e957620015e962002183565b60200101906001600160f81b031916908160001a90535060006200160e828262001544565b95945050505050565b815160009062001629836004620021cd565b11156200163557600080fd5b50016004015163ffffffff1690565b60408051600480825281830190925260009160e084901b9183916020820181803683370190505090508160031a60f81b816000815181106200168a576200168a62002183565b60200101906001600160f81b031916908160001a9053508160021a60f81b81600181518110620016be57620016be62002183565b60200101906001600160f81b031916908160001a9053508160011a60f81b81600281518110620016f257620016f262002183565b60200101906001600160f81b031916908160001a9053508160001a60f81b8160038151811062001726576200172662002183565b60200101906001600160f81b031916908160001a90535060006200160e828262001617565b60408051606080820183526000808352602083015291810191909152600082845111620017c75760405162461bcd60e51b815260206004820152602360248201527f6c656e677468206f66207261772064617461206c657373207468616e206f66666044820152621cd95d60ea1b60648201526084016200012a565b60068310156200180b5760405162461bcd60e51b815260206004820152600e60248201526d1a5b1b1959d85b081bd9999cd95d60921b60448201526064016200012a565b60408051606080820183526000808352602083015291810191909152620018426200088b86866200154460201b620020461760201c565b61ffff16815262001855600285620021cd565b935062001872620008e686866200161760201b6200210f1760201c565b63ffffffff1660208201526200188a600485620021cd565b9350620018ae8585836020015163ffffffff1662001d2a60201b620026181760201c565b60408201526020810151620018ca9063ffffffff1685620021cd565b909590945092505050565b015190565b60408051600880825281830190925260009160c084901b9183916020820181803683370190505090508160071a60f81b8160008151811062001920576200192062002183565b60200101906001600160f81b031916908160001a9053508160061a60f81b8160018151811062001954576200195462002183565b60200101906001600160f81b031916908160001a9053508160051a60f81b8160028151811062001988576200198862002183565b60200101906001600160f81b031916908160001a9053508160041a60f81b81600381518110620019bc57620019bc62002183565b60200101906001600160f81b031916908160001a9053508160031a60f81b81600481518110620019f057620019f062002183565b60200101906001600160f81b031916908160001a9053508160021a60f81b8160058151811062001a245762001a2462002183565b60200101906001600160f81b031916908160001a9053508160011a60f81b8160068151811062001a585762001a5862002183565b60200101906001600160f81b031916908160001a9053508160001a60f81b8160078151811062001a8c5762001a8c62002183565b60200101906001600160f81b031916908160001a90535060006200160e828262001db4565b909101600019810180519290915252565b600080805b62001add8462001b7360201b6200249d1760201c565b81101562001b4a5760008460200151828151811062001b005762001b0062002183565b6020026020010151905080604001515183600662001b1f9190620021e8565b63ffffffff1662001b319190620021cd565b925050808062001b4190620021af565b91505062001ac7565b5092915050565b909101600119810180519290915252565b909101600319810180519290915252565b602001515190565b606060008260200151600662001b929190620021e8565b63ffffffff166001600160401b0381111562001bb25762001bb26200204e565b6040519080825280601f01601f19166020018201604052801562001bdd576020820181803683370190505b50905062001c0060026200145e85600001516200156f60201b6200206e1760201c565b62001c2060066200148c85602001516200164460201b620021391760201c565b62000a40600684604001518362001c3d60201b620025341760201c565b8151815162001c5363ffffffff831686620021cd565b111562001cd45760405162461bcd60e51b815260206004820152604260248201527f7661724279746573546f4279746573426967456e6469616e3a206f666673657460448201527f2069732067726561746572207468616e20746865206f7574707574206c656e676064820152610e8d60f31b608482015260a4016200012a565b8015801562001ce35762001d23565b8483018051601f84168015602002818801018581018215602002838601015b8183101562001d1c57825181526020928301920162001d02565b5050509152505b5050505050565b825160609062001d3b8385620021cd565b111562001d4757600080fd5b6000826001600160401b0381111562001d645762001d646200204e565b6040519080825280601f01601f19166020018201604052801562001d8f576020820181803683370190505b5090506020808201908686010162001da982828762001de4565b509095945050505050565b815160009062001dc6836008620021cd565b111562001dd257600080fd5b5001600801516001600160401b031690565b6020811062001e24578151835262001dfe602084620021cd565b925062001e0d602083620021cd565b915062001e1c60208262002213565b905062001de4565b8062001e2f57505050565b6000600162001e4083602062002213565b62001e4e906101006200232a565b62001e5a919062002213565b925184518416931916929092179092525050565b82805462001e7c906200233f565b90600052602060002090601f01602090048101928262001ea0576000855562001eeb565b82601f1062001ebb57805160ff191683800117855562001eeb565b8280016001018555821562001eeb579182015b8281111562001eeb57825182559160200191906001019062001ece565b5062001ef992915062002037565b5090565b6040805161010081018252606080825260208201529081016000815260200162001f2662001f83565b815260200160006001600160401b0316815260200160006001600160401b031681526020016060815260200162001f7e6040518060800160405280606081526020016060815260200160608152602001606081525090565b905290565b604080518082019091528060005b8152602001606081525090565b60405180606001604052806060815260200162001f9162001f83565b6040805160c08101909152606081526020810160008152602001606081526020016060815260200162001f9162001f83565b6040805160a081018252606080825260208201","529081016000815260200162001f9162001f83565b6040518060800160405280606081526020016060815260200162001f9162001f83565b5b8082111562001ef9576000815560010162002038565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200208157818101518382015260200162002067565b8381111562002091576000848401525b50505050565b600060208284031215620020aa57600080fd5b81516001600160401b0380821115620020c257600080fd5b818401915084601f830112620020d757600080fd5b815181811115620020ec57620020ec6200204e565b604051601f8201601f19908116603f011681019083821181831017156200211757620021176200204e565b816040528281528760208487010111156200213157600080fd5b6200214483602083016020880162002064565b979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600082516200217981846020870162002064565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415620021c657620021c662002199565b5060010190565b60008219821115620021e357620021e362002199565b500190565b600063ffffffff8083168185168083038211156200220a576200220a62002199565b01949350505050565b60008282101562002228576200222862002199565b500390565b600181815b808511156200226e57816000190482111562002252576200225262002199565b808516156200226057918102915b93841c939080029062002232565b509250929050565b600082620022875750600162000a40565b81620022965750600062000a40565b8160018114620022af5760028114620022ba57620022da565b600191505062000a40565b60ff841115620022ce57620022ce62002199565b50506001821b62000a40565b5060208310610133831016604e8410600b8410161715620022ff575081810a62000a40565b6200230b83836200222d565b806000190482111562002322576200232262002199565b029392505050565b600062002338838362002276565b9392505050565b600181811c908216806200235457607f821691505b602082108114156200237657634e487b7160e01b600052602260045260246000fd5b50919050565b615f50806200238c6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806395e8fcee116100c3578063c3292b6d1161007c578063c3292b6d14610308578063d91958171461031b578063dde185461461032e578063e1ceb03014610341578063f2fde38b14610354578063fe8cc1e31461036757600080fd5b806395e8fcee14610279578063a1d6c9641461028c578063ad86bc031461029f578063adc64a18146102cd578063adf22b3f146102e0578063bf812b2c146102f557600080fd5b806355c265fe1161011557806355c265fe146101e6578063715018a6146101f957806373d6c7bd146102015780637adcff0c146102145780638da5cb5b1461025557806390157ffb1461026657600080fd5b806304802a34146101525780630604420e1461016757806309158b211461019057806312dabd3a146101b05780634ddf47d4146101d3575b600080fd5b6101656101603660046154ce565b61037a565b005b61017a6101753660046154ce565b610707565b604051610187919061556b565b60405180910390f35b6101a361019e36600461557e565b6107c8565b60405161018791906155c1565b6101c36101be3660046155cf565b6107fc565b6040519015158152602001610187565b6101656101e13660046156b9565b61085a565b6101656101f43660046154ce565b610992565b610165610cf0565b6101c361020f3660046154ce565b610d04565b61023d61022236600461570e565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610187565b6000546001600160a01b031661023d565b61017a61027436600461557e565b610d4a565b6101656102873660046154ce565b610de4565b61016561029a36600461570e565b611029565b6102bf6102ad36600461557e565b60046020526000908152604090205481565b604051908152602001610187565b61017a6102db36600461557e565b611288565b6102e8611326565b604051610187919061572b565b610165610303366004615776565b6113ae565b6101c361031636600461579f565b611598565b61017a6103293660046155cf565b6115e4565b61017a61033c36600461579f565b6116bc565b61017a61034f3660046156b9565b611707565b610165610362366004615776565b61172b565b61017a6103753660046154ce565b6117a4565b610382612699565b60006103c383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126f392505050565b90506103d6816060015160600151612895565b6104215760405162461bcd60e51b81526020600482015260176024820152761b9bc81c1d18c81d1c9d5cdd081c9bdbdd08199bdd5b99604a1b60448201526064015b60405180910390fd5b60006104348260600151606001516128d2565b905060006104458360400151612990565b905061045983606001516060015182612a4c565b6104a55760405162461bcd60e51b815260206004820152601a60248201527f6e6f207074632076657269667920616e63686f7220666f756e640000000000006044820152606401610418565b6000600560006104bc856020015160c00151612a90565b6040015160028111156104d1576104d1615597565b60028111156104e2576104e2615597565b81526020810191909152604001600020546001600160a01b03169050806105405760405162461bcd60e51b81526020600482015260126024820152711b9bc81c1d18c81d995a599a595c881cd95d60721b6044820152606401610418565b806001600160a01b031663bff3093b61056186606001516060015185612bcb565b866040518363ffffffff1660e01b815260040161057f9291906159bd565b6020604051808303816000875af115801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190615a0a565b6106075760405162461bcd60e51b81526020600482015260166024820152756661696c656420746f2076657269667920747062746160501b6044820152606401610418565b60006106168560800151612cad565b80516020918201206000818152600483526040902091870151825491935063ffffffff1611156106895760208681015163ffffffff1680835560408051858152928301919091527f14f6dcf24001d9e8910255539bf10f0a01ba6fcb712bdcd812fe528b9ad798d1910160405180910390a15b60208087015163ffffffff16600090815260018301909152604090206106b0908989615138565b507f8796377aabd0d7feac50b0be12f810cac9a467a6ccd01c3bb79e50e2da8fd1f28287602001516040516106f592919091825263ffffffff16602082015260400190565b60405180910390a15050505050505050565b606060036000848460405161071d929190615a2c565b60405180910390208152602001908152602001600020600001805461074190615a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90615a3c565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b505050505090505b92915050565b600681815481106107d857600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b600080600460008686604051610813929190615a2c565b6040518091039020815260200190815260200160002060010160008463ffffffff168152602001908152602001600020805461084e90615a3c565b90501190509392505050565b600054600160a81b900460ff161580801561088257506000546001600160a01b90910460ff16105b806108a35750303b1580156108a35750600054600160a01b900460ff166001145b6109065760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610418565b6000805460ff60a01b1916600160a01b1790558015610933576000805460ff60a81b1916600160a81b1790555b61093c82612f3c565b61094533613089565b801561098e576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b60006109d383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130d992505050565b905060006109e48260200151612cad565b805160208083019190912060009081526004825260408082208682015163ffffffff16835260010190925290812080549293509091610a2290615a3c565b905011610a655760405162461bcd60e51b815260206004820152601160248201527009dd1c189d1849c81b9bdd08199bdd5b99607a1b6044820152606401610418565b6000610a7b82846040015163ffffffff166131d3565b9050610a8e816060015160600151612895565b610ad45760405162461bcd60e51b81526020600482015260176024820152761b9bc81c1d18c81d1c9d5cdd081c9bdbdd08199bdd5b99604a1b6044820152606401610418565b6000610ae78260600151606001516128d2565b90506000610af88360400151612990565b9050610b0c83606001516060015182612a4c565b610b585760405162461bcd60e51b815260206004820152601a60248201527f6e6f207074632076657269667920616e63686f7220666f756e640000000000006044820152606401610418565b600060056000610b6f856020015160c00151612a90565b604001516002811115610b8457610b84615597565b6002811115610b9557610b95615597565b81526020810191909152604001600020546001600160a01b0316905080610bf35760405162461bcd60e51b81526020600482015260126024820152711b9bc81c1d18c81d995a599a595c881cd95d60721b6044820152606401610418565b60405163048a3c5760e41b81526000906001600160a01b038316906348a3c57090610c249088908b90600401615a77565b6020604051808303816000875af1158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190615a0a565b90507f4d2d7be42668dce292","7650393613e408fc71274deac16f825eb0a869a5667e8c856080015182604051610c9e929190615afe565b60405180910390a180610ce55760405162461bcd60e51b815260206004820152600f60248201526e766572696679206e6f74207061737360881b6044820152606401610418565b505050505050505050565b610cf8612699565b610d026000613089565b565b600080600360008585604051610d1b929190615a2c565b604051809103902081526020019081526020016000206000018054610d3f90615a3c565b905011905092915050565b60026020526000908152604090208054610d6390615a3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8f90615a3c565b8015610ddc5780601f10610db157610100808354040283529160200191610ddc565b820191906000526020600020905b815481529060010190602001808311610dbf57829003601f168201915b505050505081565b610dec612699565b6000610e2d83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329192505050565b9050610e38816133d2565b6000610e43826135f6565b60008181526003602052604081208054929350918290610e6290615a3c565b90501115610f4b57610e75818686615138565b505b606083015160208101515190511015610f46576000610e998460600151613616565b60008181526001840160205260409020805491925090610eb890615a3c565b15159050610f3157610ecd8460600151613629565b600082815260018401602090815260409091208251610ef293919291909101906151bc565b5060408051848152602081018390527f176999d0f8f8c628a9ada0c1090671dffa60ab4b6720f3d647a823aac2368fce910160405180910390a1610f40565b610f3e8460600151613629565b505b50610e77565b611022565b610f56818686615138565b505b606083015160208101515190511015610fee576000610f7a8460600151613616565b9050610f898460600151613629565b600082815260018401602090815260409091208251610fae93919291909101906151bc565b5060408051848152602081018390527f176999d0f8f8c628a9ada0c1090671dffa60ab4b6720f3d647a823aac2368fce910160405180910390a150610f58565b6040518281527fc115cf6e41eccaaf9dbe48f3cbf3e82c176644e35bf1cae0839627723d980a0d9060200160405180910390a15b5050505050565b611031612699565b600060058183600281111561104857611048615597565b600281111561105957611059615597565b81526020810191909152604001600020546001600160a01b031614156110c15760405162461bcd60e51b815260206004820152601760248201527f707463207665726966696572206e6f74206578697374730000000000000000006044820152606401610418565b60015b600654811015611207578160028111156110e0576110e0615597565b600682815481106110f3576110f3615b22565b90600052602060002090602091828204019190069054906101000a900460ff16600281111561112457611124615597565b14156111f5576006805461113a90600190615b4e565b8154811061114a5761114a615b22565b90600052602060002090602091828204019190069054906101000a900460ff166006828154811061117d5761117d615b22565b90600052602060002090602091828204019190066101000a81548160ff021916908360028111156111b0576111b0615597565b021790555060068054806111c6576111c6615b65565b60019003818190600052602060002090602091828204019190066101000a81549060ff02191690559055611207565b806111ff81615b7b565b9150506110c4565b506005600082600281111561121e5761121e615597565b600281111561122f5761122f615597565b81526020810191909152604090810160002080546001600160a01b0319169055517f4ae9b990c01f3cf6322d2f72f0c0a7eefdcdb12b782e47f420dbc75314d7f5089061127d9083906155c1565b60405180910390a150565b6003602052600090815260409020805481906112a390615a3c565b80601f01602080910402602001604051908101604052809291908181526020018280546112cf90615a3c565b801561131c5780601f106112f15761010080835404028352916020019161131c565b820191906000526020600020905b8154815290600101906020018083116112ff57829003601f168201915b5050505050905081565b606060068054806020026020016040519081016040528092919081815260200182805480156113a457602002820191906000526020600020906000905b82829054906101000a900460ff16600281111561138257611382615597565b8152602060019283018181049485019490930390920291018084116113635790505b5050505050905090565b6113b6612699565b6000816001600160a01b031663b93ba39c6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c9190615b96565b9050600060058183600281111561143557611435615597565b600281111561144657611446615597565b81526020810191909152604001600020546001600160a01b0316146114ad5760405162461bcd60e51b815260206004820152601b60248201527f70746320766572696669657220616c72656164792065786973747300000000006044820152606401610418565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f602082040180548392601f166101000a60ff8102199091169083600281111561150957611509615597565b0217905550816005600083600281111561152557611525615597565b600281111561153657611536615597565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507e9d36884bab8205b3032d60f42239b9d5024f0acd6178f117374a9bbef092958183604051610985929190615bb3565b6000806003600086866040516115af929190615a2c565b604051809103902081526020019081526020016000206001016000848152602001908152602001600020805461084e90615a3c565b60606004600085856040516115fa929190615a2c565b6040518091039020815260200190815260200160002060010160008363ffffffff168152602001908152602001600020805461163590615a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461166190615a3c565b80156116ae5780601f10611683576101008083540402835291602001916116ae565b820191906000526020600020905b81548152906001019060200180831161169157829003601f168201915b505050505090509392505050565b60606003600085856040516116d2929190615a2c565b604051809103902081526020019081526020016000206001016000838152602001908152602001600020805461163590615a3c565b805160208183018101805160018252928201919093012091528054610d6390615a3c565b611733612699565b6001600160a01b0381166117985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610418565b6117a181613089565b50565b606060006004600085856040516117bc929190615a2c565b6040518091039020815260200190815260200160002090508060010160008260000154815260200190815260200160002080546117f890615a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461182490615a3c565b80156118715780601f1061184657610100808354040283529160200191611871565b820191906000526020600020905b81548152906001019060200180831161185457829003601f168201915b505050505091505092915050565b611887615230565b61188f615230565b600061189a84611c71565b905060005b816020015151811015611a3e576000826020015182815181106118c4576118c4615b22565b60200260200101519050600061ffff16816000015161ffff1614156118ef5760408101518452611a2b565b805161ffff166001141561190c5760408101516020850152611a2b565b805161ffff16600214156119685761192381611e53565b60ff16600381111561193757611937615597565b8460400190600381111561194d5761194d615597565b9081600381111561196057611960615597565b905250611a2b565b805161ffff166003141561199357611989611984826040015190565b6136cf565b6060850152611a2b565b805161ffff16600414156119bd576119aa81611e64565b6001600160401b03166080850152611a2b565b805161ffff16600514156119e7576119d481611e64565b6001600160401b031660a0850152611a2b565b805161ffff1660061415611a0457604081015160c0850152611a2b565b805161ffff1660071415611a2b57611a25611a20826040015190565b6137aa565b60e08501525b5080611a3681615b7b565b91505061189f565b50909392505050565b611a4f6152b3565b600082604001516003811115611a6757611a67615597565b1415611a8457611a7a8260c001516138c6565b6020015192915050565b600182604001516003811115611a9c57611a9c615597565b1415611ab957611aaf8260c00151613988565b6080015192915050565b600282604001516003811115611ad157611ad1615597565b1415611aee57611ae48260c00151612a90565b6060015192915050565b600382604001516003811115611b0657611b06615597565b1415611b2357611b198260c00151613ae0565b6040015192915050565b60405162461bcd60e51b815260206004820152602660248201527f676574436572744f776e65724f69643a20636572742074797065206e6f7420736044820152651d5c1c1bdc9d60d21b6064820152608401610418565b604080516002808252606082810190935260009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081611b94579050509050611bed6000611be885600001516001811115611be357611be3615597565b611e7d565b611e91565b81600081518110611c0057611c00615b22565b6020026020010181905250611c1a60018460200151611efe565b81600181518110611c2d57611c2d615b22565b6020026020010181905250611c596040518060400160405280600061ffff168152602001606081525090565b60208101829052611c6981611f41565b949350505050565b6040","80518082019091526000815260606020820152600682511015611cd85760405162461bcd60e51b815260206004820152601760248201527f696c6c6567616c207261772064617461206c656e6774680000000000000000006044820152606401610418565b6040805180820190915260008082526060602083015290611d01611cfc8584612046565b61206e565b61ffff168152611d12600683615bd9565b91506000825b8551811015611d6c57611d3d611d3887611d33846002615bd9565b61210f565b612139565b611d48906006615bf1565b611d589063ffffffff1682615bd9565b905081611d6481615b7b565b925050611d18565b6000826001600160401b03811115611d8657611d8661562e565b604051908082528060200260200182016040528015611dd357816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081611da45790505b509050600092505b8651851015611e3d5760408051606080820183526000808352602083015291810191909152611e0a8887613bbf565b96509050808285611e1a81615b7b565b965081518110611e2c57611e2c615b22565b602002602001018190525050611ddb565b60208401525090949350505050565b6040015190565b60006107c260018360400151015190565b60006107c2611e7860088460400151015190565b612238565b60008160018111156107c2576107c2615597565b60408051606080820183526000808352602083015291810191909152604080516001808252818301909252600091602082018180368337019050509050611eda600184836123f6565b6040805160608101825261ffff959095168552600160208601528401525090919050565b60408051606080820183526000808352602083015291810191909152506040805160608101825261ffff939093168352815163ffffffff16602084015282015290565b60606000611f4e83612407565b90506000611f5d826006615bf1565b63ffffffff166001600160401b03811115611f7a57611f7a61562e565b6040519080825280601f01601f191660200182016040528015611fa4576020820181803683370190505b509050611fbf6002611fb9866000015161206e565b8361247b565b611fd36006611fcd84612139565b8361248c565b600660005b60208601515181101561203c57600061200d8760200151838151811061200057612000615b22565b60200260200101516124a5565b905061201a838286612534565b80516120269084615bd9565b925050808061203490615b7b565b915050611fd8565b5090949350505050565b8151600090612056836002615bd9565b111561206157600080fd5b50016002015161ffff1690565b60408051600280825281830190925260009160f084901b9183916020820181803683370190505090508160011a60f81b816000815181106120b1576120b1615b22565b60200101906001600160f81b031916908160001a9053508160001a60f81b816001815181106120e2576120e2615b22565b60200101906001600160f81b031916908160001a9053506000612106826000612046565b95945050505050565b815160009061211f836004615bd9565b111561212a57600080fd5b50016004015163ffffffff1690565b60408051600480825281830190925260009160e084901b9183916020820181803683370190505090508160031a60f81b8160008151811061217c5761217c615b22565b60200101906001600160f81b031916908160001a9053508160021a60f81b816001815181106121ad576121ad615b22565b60200101906001600160f81b031916908160001a9053508160011a60f81b816002815181106121de576121de615b22565b60200101906001600160f81b031916908160001a9053508160001a60f81b8160038151811061220f5761220f615b22565b60200101906001600160f81b031916908160001a905350600061210682600061210f565b015190565b60408051600880825281830190925260009160c084901b9183916020820181803683370190505090508160071a60f81b8160008151811061227b5761227b615b22565b60200101906001600160f81b031916908160001a9053508160061a60f81b816001815181106122ac576122ac615b22565b60200101906001600160f81b031916908160001a9053508160051a60f81b816002815181106122dd576122dd615b22565b60200101906001600160f81b031916908160001a9053508160041a60f81b8160038151811061230e5761230e615b22565b60200101906001600160f81b031916908160001a9053508160031a60f81b8160048151811061233f5761233f615b22565b60200101906001600160f81b031916908160001a9053508160021a60f81b8160058151811061237057612370615b22565b60200101906001600160f81b031916908160001a9053508160011a60f81b816006815181106123a1576123a1615b22565b60200101906001600160f81b031916908160001a9053508160001a60f81b816007815181106123d2576123d2615b22565b60200101906001600160f81b031916908160001a9053506000612106826000613d1a565b909101600019810180519290915252565b600080805b6020840151518110156124745760008460200151828151811061243157612431615b22565b6020026020010151905080604001515183600661244e9190615bf1565b63ffffffff1661245e9190615bd9565b925050808061246c90615b7b565b91505061240c565b5092915050565b909101600119810180519290915252565b909101600319810180519290915252565b602001515190565b60606000826020015160066124ba9190615bf1565b63ffffffff166001600160401b038111156124d7576124d761562e565b6040519080825280601f01601f191660200182016040528015612501576020820181803683370190505b5090506125166002611fb9856000015161206e565b6125286006611fcd8560200151612139565b6107c260068460400151835b8151815161254863ffffffff831686615bd9565b11156125c75760405162461bcd60e51b815260206004820152604260248201527f7661724279746573546f4279746573426967456e6469616e3a206f666673657460448201527f2069732067726561746572207468616e20746865206f7574707574206c656e676064820152610e8d60f31b608482015260a401610418565b801580156125d457611022565b8483018051601f84168015602002818801018581018215602002838601015b8183101561260b5782518152602092830192016125f3565b5050509152505050505050565b82516060906126278385615bd9565b111561263257600080fd5b6000826001600160401b0381111561264c5761264c61562e565b6040519080825280601f01601f191660200182016040528015612676576020820181803683370190505b5090506020808201908686010161268e828287613d47565b509095945050505050565b6000546001600160a01b03163314610d025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610418565b6126fb6152ce565b6127036152ce565b600061270e84611c71565b905060005b816020015151811015611a3e5760008260200151828151811061273857612738615b22565b60200260200101519050600061ffff16816000015161ffff16141561276d5761276081613dc2565b63ffffffff168452612882565b805161ffff16600114156127945761278481613dc2565b63ffffffff166020850152612882565b805161ffff16600214156127b15760408101516040850152612882565b805161ffff16600314156127dc576127d26127cd826040015190565b612a90565b6060850152612882565b805161ffff1660041415612807576127fd6127f8826040015190565b613dd6565b6080850152612882565b805161ffff166005141561282e5761281e81613dc2565b63ffffffff1660a0850152612882565b805161ffff166006141561284b57604081015160c0850152612882565b805161ffff166007141561286857604081015160e0850152612882565b805161ffff1660ff14156128825760408101516101008501525b508061288d81615b7b565b915050612713565b600080600360006128a585611b7a565b80519060200120815260200190815260200160002060000180546128c890615a3c565b9050119050919050565b6128da61532b565b6107c2600360006128ea85611b7a565b805190602001208152602001908152602001600020600001805461290d90615a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461293990615a3c565b80156129865780601f1061295b57610100808354040283529160200191612986565b820191906000526020600020905b81548152906001019060200180831161296957829003601f168201915b5050505050613291565b805160009060208111156129f25760405162461bcd60e51b815260206004820152602360248201527f333262797465732062696720696e7465676572206174206d6f737420666f72206044820152626e6f7760e81b6064820152608401610418565b6000816001600160401b03811115612a0c57612a0c61562e565b6040519080825280601f01601f191660200182016040528015612a36576020820181803683370190505b5084518152938201519190930151900392915050565b60008060036000612a5c86611b7a565b80519060200120815260200190815260200160002060010160008481526020019081526020016000208054610d3f90615a3c565b612a98615382565b612aa0615382565b6000612aab84611c71565b905060005b816020015151811015611a3e57600082602001518281518110612ad557612ad5615b22565b60200260200101519050600061ffff16816000015161ffff161415612b005760408101518452612bb8565b805161ffff1660011415612b1d5760408101516020850152612bb8565b805161ffff1660021415612b7957612b3481611e53565b60ff166002811115612b4857612b48615597565b84604001906002811115612b5e57612b5e615597565b90816002811115612b7157612b71615597565b905250612bb8565b805161ffff1660031415612b9f57612b95611984826040015190565b6060850152612bb8565b805161ffff1660041415612bb857604081015160808501525b5080612bc381615b7b565b915050612ab0565b6040805180820190915260608082526020820152612ca660036000612bef86611b7a565b80519060200120815260200190815260200160002060010160008481526020019081526020016000208054612c2390615a3c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c4f90615a3c565b8015612c9c5780601f10612c7157610100808354040283529160200191612c9c565b8201","91906000526020600020905b815481529060010190602001808311612c7f57829003601f168201915b5050505050613ec9565b9392505050565b60208101516060908190158015612cc657506040830151155b15612d4b5760408051600180825281830190925290816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081612ce0579050509050612d286000612d238560000151613f7d565b611efe565b81600081518110612d3b57612d3b615b22565b6020026020010181905250612f22565b602083015115801590612d615750604083015115155b15612eda576040805160038082526080820190925290816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081612d7c579050509050612dbf6000612d238560000151613f7d565b81600081518110612dd257612dd2615b22565b6020026020010181905250600060206001600160401b03811115612df857612df861562e565b6040519080825280601f01601f191660200182016040528015612e22576020820181803683370190505b50602085810151908201529050612e3a600182611efe565b82600181518110612e4d57612e4d615b22565b6020026020010181905250600060206001600160401b03811115612e7357612e7361562e565b6040519080825280601f01601f191660200182016040528015612e9d576020820181803683370190505b50604086015160208201529050612eb5600282611efe565b83600281518110612ec857612ec8615b22565b60200260200101819052505050612f22565b60405162461bcd60e51b815260206004820152601760248201527f696e76616c69642063726f7373636861696e206c616e650000000000000000006044820152606401610418565b604080518082019091526000815260606020820152611c59565b6000612f478261187f565b9050600081604001516003811115612f6157612f61615597565b14612fae5760405162461bcd60e51b815260206004820152601e60248201527f77726f6e67207479706520666f72206263646e7320726f6f74206365727400006044820152606401610418565b6000612fc1612fbc83611a47565b611b7a565b805190602001209050826001604051806040016040528060048152602001631c9bdbdd60e21b815250604051612ff79190615c19565b908152602001604051809103902090805190602001906130189291906151bc565b5060408051808201825260048152631c9bdbdd60e21b60208083019182526000858152600290915292909220905161305092906151bc565b506040518181527f7c787bfbe942686b5f41acec151012ca79c6b81c1c5a23cee512781cf3d5b9bb9060200160405180910390a1505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6130e16153a8565b6130e96153a8565b60006130f484611c71565b905060005b816020015151811015611a3e5760008260200151828151811061311e5761311e615b22565b60200260200101519050600561ffff16816000015161ffff1614156131575761315061314b826040015190565b61408c565b84526131c0565b805161ffff16610101141561317e576131746127f8826040015190565b60208501526131c0565b805161ffff1661010014156131a65761319681613dc2565b63ffffffff1660408501526131c0565b805161ffff166101ff14156131c057604081015160608501525b50806131cb81615b7b565b9150506130f9565b6131db6152ce565b82516020808501919091206000908152600482526040808220858352600101909252208054612ca6919061320e90615a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461323a90615a3c565b80156132875780601f1061325c57610100808354040283529160200191613287565b820191906000526020600020905b81548152906001019060200180831161326a57829003601f168201915b50505050506126f3565b61329961532b565b6132a161532b565b60006132ac84611c71565b905060005b816020015151811015611a3e576000826020015182815181106132d6576132d6615b22565b60200260200101519050600061ffff16816000015161ffff16141561330157604081015184526133bf565b805161ffff166001141561332c5761332261331d826040015190565b61187f565b60208501526133bf565b805161ffff166002141561334957604081015160408501526133bf565b805161ffff1660031415613389576040805180820182526000808252606060209283015282518084018452908152918301519082015260608501526133bf565b805161ffff16600414156133a657604081015160808501526133bf565b805161ffff16600514156133bf57604081015160a08501525b50806133ca81615b7b565b9150506132b1565b60006133e5826020015160600151611b7a565b8051602091820120600081815260029092526040822080549193509061340a90615a3c565b90501161344c5760405162461bcd60e51b815260206004820152601060248201526f1a5cdcdd595c881b9bdd08199bdd5b9960821b6044820152606401610418565b600081815260026020526040808220905161350a9160019161346e9190615c35565b9081526020016040518091039020805461348790615a3c565b80601f01602080910402602001604051908101604052809291908181526020018280546134b390615a3c565b80156135005780601f106134d557610100808354040283529160200191613500565b820191906000526020600020905b8154815290600101906020018083116134e357829003601f168201915b505050505061187f565b9050613555604051806040016040528060168152602001754b656363616b32353657697468536563703235366b3160501b8152508260e001516040015161411990919063ffffffff16565b1561359c5760008061357483866020015161412f90919063ffffffff16565b915091508181906135985760405162461bcd60e51b8152600401610418919061556b565b5050505b6135a5836142c3565b6135f15760405162461bcd60e51b815260206004820152601a60248201527f70746320747275737420726f6f742073696720696e76616c69640000000000006044820152606401610418565b505050565b6000613608612fbc8360200151611a47565b805190602001209050919050565b60006107c261362483613629565b612990565b60608160200151518260000151106136975760405162461bcd60e51b815260206004820152602b60248201527f544c564974656d4d617056616c756553747265616d3a206f6666657374206f7560448201526a3a1037b310313ab33332b960a91b6064820152608401610418565b60006136ab836000015184602001516142ed565b80518451919250906136be906004615bd9565b6136c89190615bd9565b9092525090565b6136d76152b3565b6136df6152b3565b60006136ea84611c71565b905060005b816020015151811015611a3e5760008260200151828151811061371457613714615b22565b60200260200101519050600061ffff16816000015161ffff16141561377e5761373c81611e53565b60ff16600181111561375057613750615597565b8490600181111561376357613763615597565b9081600181111561377657613776615597565b905250613797565b805161ffff166001141561379757604081015160208501525b50806137a281615b7b565b9150506136ef565b6137d56040518060800160405280606081526020016060815260200160608152602001606081525090565b6138006040518060800160405280606081526020016060815260200160608152602001606081525090565b600061380b84611c71565b905060005b816020015151811015611a3e5760008260200151828151811061383557613835615b22565b60200260200101519050600061ffff16816000015161ffff16141561386057604081015184526138b3565b805161ffff166001141561387d57604081015160208501526138b3565b805161ffff166002141561389a57604081015160408501526138b3565b805161ffff16600314156138b357604081015160608501525b50806138be81615b7b565b915050613810565b6138ce6153de565b6138d66153de565b60006138e184611c71565b905060005b816020015151811015611a3e5760008260200151828151811061390b5761390b615b22565b60200260200101519050600061ffff16816000015161ffff1614156139365760408101518452613975565b805161ffff166001141561395c57613952611984826040015190565b6020850152613975565b805161ffff166002141561397557604081015160408501525b508061398081615b7b565b9150506138e6565b6139906153f8565b6139986153f8565b60006139a384611c71565b905060005b816020015151811015611a3e576000826020015182815181106139cd576139cd615b22565b60200260200101519050600061ffff16816000015161ffff1614156139f85760408101518452613acd565b805161ffff1660011415613a5457613a0f81611e53565b60ff166001811115613a2357613a23615597565b84602001906001811115613a3957613a39615597565b90816001811115613a4c57613a4c615597565b905250613acd565b805161ffff1660021415613a715760408101516040850152613acd565b805161ffff1660031415613a8e5760408101516060850152613acd565b805161ffff1660041415613ab457613aaa611984826040015190565b6080850152613acd565b805161ffff1660051415613acd57604081015160a08501525b5080613ad881615b7b565b9150506139a8565b613ae8615428565b613af0615428565b6000613afb84611c71565b905060005b816020015151811015611a3e57600082602001518281518110613b2557613b25615b22565b60200260200101519050600061ffff16816000015161ffff161415613b505760408101518452613bac565b805161ffff1660011415613b6d5760408101516020850152613bac565b805161ffff1660031415613b9357613b89611984826040015190565b6040850152613bac565b805161ffff1660041415613bac57604081015160608501525b5080613bb781615b7b565b915050613b00565b60408051606080820183526000808352602083015291810191909152600082845111613c395760405162461bcd60e51b815260206004820152602360248201527f6c656e677468206f66207261772064617461206c657373207468616e206f66666044820152621cd95d60ea1b6064820152608401610418565b6006831015613c7b5760405162461bcd60e51b815260206004820152600e60248201526d1a5b1b1959d85b081bd9999cd95d60921b6044820152","606401610418565b60408051606080820183526000808352602083015291810191909152613ca4611cfc8686612046565b61ffff168152613cb5600285615bd9565b9350613cc4611d38868661210f565b63ffffffff166020820152613cda600485615bd9565b9350613cf18585836020015163ffffffff16612618565b60408201526020810151613d0b9063ffffffff1685615bd9565b935091508290505b9250929050565b8151600090613d2a836008615bd9565b1115613d3557600080fd5b5001600801516001600160401b031690565b60208110613d7f5781518352613d5e602084615bd9565b9250613d6b602083615bd9565b9150613d78602082615b4e565b9050613d47565b80613d8957505050565b60006001613d98836020615b4e565b613da490610100615db5565b613dae9190615b4e565b925184518416931916929092179092525050565b60006107c2611d3860048460400151015190565b613dde615449565b613de6615449565b6000613df184611c71565b905060005b816020015151811015611a3e57600082602001518281518110613e1b57613e1b615b22565b60200260200101519050600061ffff16816000015161ffff161415613e5457613e4d613e48826040015190565b614381565b8452613eb6565b805161ffff1660011415613e87576000613e6f826040015190565b9050613e7c815182015190565b602086015250613eb6565b805161ffff1660021415613eb6576000613ea2826040015190565b9050613eaf815182015190565b6040860152505b5080613ec181615b7b565b915050613df6565b604080518082019091526060808252602082015260408051808201909152606080825260208201526000613efc84611c71565b905060005b816020015151811015611a3e57600082602001518281518110613f2657613f26615b22565b60200260200101519050600061ffff16816000015161ffff161415613f515760408101518452613f6a565b805161ffff1660011415613f6a57604081015160208501525b5080613f7581615b7b565b915050613f01565b60608060008360200151511115614024576040805160028082526060820190925290816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081613fa4579050509050613fe460008460000151611efe565b81600081518110613ff757613ff7615b22565b602002602001018190525061401160018460200151611efe565b81600181518110612d3b57612d3b615b22565b60408051600180825281830190925290816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161403957905050905061407960008460000151611efe565b81600081518110611c2d57611c2d615b22565b60408051602081019091526060815260408051602081019091526060815260006140b584611c71565b905060005b816020015151811015611a3e576000826020015182815181106140df576140df615b22565b60200260200101519050600061ffff16816000015161ffff16141561410657604081015184525b508061411181615b7b565b9150506140ba565b8051602091820120825192909101919091201490565b60006060818360400151600381111561414a5761414a615597565b14156141ab57600061415f8460c001516138c6565b905061417c8160200151866060015161443590919063ffffffff16565b6141a5576000604051806060016040528060288152602001615ef3602891399250925050613d13565b50614253565b6001836040015160038111156141c3576141c3615597565b141561422f5760006141d88460c00151613988565b90506001816020015160018111156141f2576141f2615597565b1461421c576000604051806080016040528060538152602001615ea0605391399250925050613d13565b6080810151606086015161417c91614435565b60006040518060600160405280603d8152602001615e3c603d913991509150613d13565b61427f8460e001516040015161426885614460565b61427187614585565b8760e001516060015161471a565b1561429d575050604080516020810190915260008152600190613d13565b6000604051806060016040528060278152602001615e7960279139915091509250929050565b60006107c282608001516142da8460200151614460565b6142e3856148e5565b8560a0015161471a565b60606142fa600484615bd9565b9250600061430b611d388585015190565b63ffffffff16905060608115801561432e57604051915060208201604052614378565b6040519150601f8316801560200281840101848101888315602002848a0101015b8183101561436757805183526020928301920161434f565b5050848452601f01601f1916604052505b50949350505050565b6040805180820190915260608082526020820152604080518082019091526060808252602082015260006143b484611c71565b905060005b816020015151811015611a3e576000826020015182815181106143de576143de615b22565b60200260200101519050600061ffff16816000015161ffff1614156144095760408101518452614422565b805161ffff166001141561442257604081015160208501525b508061442d81615b7b565b9150506143b9565b600061444082611b7a565b8051906020012061445084611b7a565b8051906020012014905092915050565b606060008260400151600381111561447a5761447a615597565b1415614495576107c26144908360c001516138c6565b614a0f565b6001826040015160038111156144ad576144ad615597565b14156144c8576107c26144c38360c00151613988565b614a2c565b6002826040015160038111156144e0576144e0615597565b14156144fb576107c26144f68360c00151612a90565b614a49565b60038260400151600381111561451357614513615597565b141561452e576107c26145298360c00151613ae0565b614a66565b60405162461bcd60e51b815260206004820152602660248201527f6765745261775075626c69634b65793a20636572742074797065206e6f7420736044820152651d5c1c1bdc9d60d21b6064820152608401610418565b604080516007808252610100820190925260609160009190816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816145a25790505090506145e260008460000151611efe565b816000815181106145f5576145f5615b22565b602002602001018190525061460f60018460200151611efe565b8160018151811061462257614622615b22565b60200260200101819052506146506002611be88560400151600381111561464b5761464b615597565b614a7a565b8160028151811061466357614663615b22565b60200260200101819052506146806003612d238560600151611b7a565b8160038151811061469357614693615b22565b60200260200101819052506146ad60048460800151614a8e565b816004815181106146c0576146c0615b22565b60200260200101819052506146da60058460a00151614a8e565b816005815181106146ed576146ed615b22565b602002602001018190525061470760068460c00151611efe565b81600681518110611c2d57611c2d615b22565b600061475d604051806040016040528060168152602001754b656363616b32353657697468536563703235366b3160501b8152508661411990919063ffffffff16565b6147c55760405162461bcd60e51b815260206004820152603360248201527f6f6e6c7920737570706f7274204b454343414b3235365f574954485f534543506044820152723235364b31207369676e6174757265206e6f7760681b6064820152608401610418565b6041825110156148175760405162461bcd60e51b815260206004820152601a60248201527f77726f6e6720736563703235366b3120736967206c656e6774680000000000006044820152606401610418565b601b8260408151811061482c5761482c615b22565b016020015161483e919060f81c615dc1565b60f81b8260408151811061485457614854615b22565b60200101906001600160f81b031916908160001a90535083516020850120600090614886908551602087012085614b0e565b9050601b8360408151811061489d5761489d615b22565b01602001516148af919060f81c615de6565b60f81b836040815181106148c5576148c5615b22565b60200101906001600160f81b031916908160001a90535095945050505050565b60408051600580825260c0820190925260609160009190816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161490157905050905061494160008460000151611efe565b8160008151811061495457614954615b22565b60200260200101819052506149716001612d238560200151614b6f565b8160018151811061498457614984615b22565b602002602001018190525061499e60028460400151611efe565b816002815181106149b1576149b1615b22565b60200260200101819052506149cf6003846060015160200151611efe565b816003815181106149e2576149e2615b22565b60200260200101819052506149fc60048460800151611efe565b81600481518110611c2d57611c2d615b22565b60606107c282604001518360200151614d2f90919063ffffffff16565b60606107c28260a001518360800151614d2f90919063ffffffff16565b60606107c282608001518360600151614d2f90919063ffffffff16565b60608181015160408301516107c291614d2f565b60008160038111156107c2576107c2615597565b60408051606080820183526000808352602083015291810191909152604080516008808252818301909252600091602082018180368337019050509050614aea6008614ad985612238565b908301600719810180519290915252565b6040805160608101825261ffff959095168552600860208601528401525090919050565b6000806000614b1d8585614e4f565b90925090506000816004811115614b3657614b36615597565b148015614b545750856001600160a01b0316826001600160a01b0316145b80614b655750614b65868686614e92565b9695505050505050565b604080516008808252610120820190925260609160009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081614b8c579050509050614bcc60008460000151611efe565b81600081518110614bdf57614bdf615b22565b6020026020010181905250614bf960018460200151611efe565b81600181518110614c0c57614c0c615b22565b6020026020010181905250614c356002611be88560400151600381111561464b5761464b615597565b81600281518110614c4857614c48615b22565b6020026020010181905250614c656003612d238560600151611b7a565b81600381518110614c7857614c78","615b22565b6020026020010181905250614c9260048460800151614a8e565b81600481518110614ca557614ca5615b22565b6020026020010181905250614cbf60058460a00151614a8e565b81600581518110614cd257614cd2615b22565b6020026020010181905250614cec60068460c00151611efe565b81600681518110614cff57614cff615b22565b6020026020010181905250614d1c6007612d238560e00151614f7e565b81600781518110611c2d57611c2d615b22565b6060600083516001811115614d4657614d46615597565b14614da15760405162461bcd60e51b815260206004820152602560248201527f6f6e6c7920737570706f727420583530395f5055424c49435f4b45595f494e466044820152644f206e6f7760d81b6064820152608401610418565b60408360200151511015614df75760405162461bcd60e51b815260206004820152601c60248201527f7075626c6963206b6579206c656e677468206e6f7420656e6f757468000000006044820152606401610418565b60208301518051600090614e0d90604090615b4e565b60408051818152606081018252919250600091906020820181803683370190505092909101602081810151908401526040908101519083015250905092915050565b600080825160411415614e865760208301516040840151606085015160001a614e7a87828585615074565b94509450505050613d13565b50600090506002613d13565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401614ebc929190615e09565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051614efa9190615c19565b600060405180830381855afa9150503d8060008114614f35576040519150601f19603f3d011682016040523d82523d6000602084013e614f3a565b606091505b5091509150818015614f4e57506020815110155b8015614b6557508051630b135d3f60e11b90614f739083016020908101908401615e22565b149695505050505050565b60408051600480825260a0820190925260609160009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081614f9a579050509050614fda60008460000151611efe565b81600081518110614fed57614fed615b22565b602002602001018190525061500760018460200151611efe565b8160018151811061501a5761501a615b22565b602002602001018190525061503460028460400151611efe565b8160028151811061504757615047615b22565b602002602001018190525061506160038460600151611efe565b81600381518110611c2d57611c2d615b22565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156150ab575060009050600361512f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156150ff573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166151285760006001925092505061512f565b9150600090505b94509492505050565b82805461514490615a3c565b90600052602060002090601f01602090048101928261516657600085556151ac565b82601f1061517f5782800160ff198235161785556151ac565b828001600101855582156151ac579182015b828111156151ac578235825591602001919060010190615191565b506151b8929150615478565b5090565b8280546151c890615a3c565b90600052602060002090601f0160209004810192826151ea57600085556151ac565b82601f1061520357805160ff19168380011785556151ac565b828001600101855582156151ac579182015b828111156151ac578251825591602001919060010190615215565b604080516101008101825260608082526020820152908101600081526020016152576152b3565b815260200160006001600160401b0316815260200160006001600160401b03168152602001606081526020016152ae6040518060800160405280606081526020016060815260200160608152602001606081525090565b905290565b604080518082019091528060005b8152602001606081525090565b60408051610120810182526000808252602082015260609181018290529081016152f6615382565b8152602001615303615449565b8152602001600063ffffffff1681526020016060815260200160608152602001606081525090565b6040518060c0016040528060608152602001615345615230565b81526020016060815260200161536e604051806040016040528060008152602001606081525090565b815260200160608152602001606081525090565b6040805160a08101825260608082526020820152908101600081526020016152c16152b3565b6040805160a081019091526060608082019081528152602081016153ca615449565b815260006020820152606060409091015290565b6040518060600160405280606081526020016152c16152b3565b6040805160c0810190915260608152602081016000815260200160608152602001606081526020016152c16152b3565b604051806080016040528060608152602001606081526020016152c16152b3565b6040805160a0810182526060808201818152608083019190915281526000602082018190529181019190915290565b5b808211156151b85760008155600101615479565b60008083601f84011261549f57600080fd5b5081356001600160401b038111156154b657600080fd5b602083019150836020828501011115613d1357600080fd5b600080602083850312156154e157600080fd5b82356001600160401b038111156154f757600080fd5b6155038582860161548d565b90969095509350505050565b60005b8381101561552a578181015183820152602001615512565b83811115615539576000848401525b50505050565b6000815180845261555781602086016020860161550f565b601f01601f19169290920160200192915050565b602081526000612ca6602083018461553f565b60006020828403121561559057600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b600381106155bd576155bd615597565b9052565b602081016107c282846155ad565b6000806000604084860312156155e457600080fd5b83356001600160401b038111156155fa57600080fd5b6156068682870161548d565b909450925050602084013563ffffffff8116811461562357600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561565e5761565e61562e565b604051601f8501601f19908116603f011681019082821181831017156156865761568661562e565b8160405280935085815286868601111561569f57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156156cb57600080fd5b81356001600160401b038111156156e157600080fd5b8201601f810184136156f257600080fd5b611c6984823560208401615644565b600381106117a157600080fd5b60006020828403121561572057600080fd5b8135612ca681615701565b6020808252825182820181905260009190848201906040850190845b8181101561576a5761575a8385516155ad565b9284019291840191600101615747565b50909695505050505050565b60006020828403121561578857600080fd5b81356001600160a01b0381168114612ca657600080fd5b6000806000604084860312156157b457600080fd5b83356001600160401b038111156157ca57600080fd5b6157d68682870161548d565b909790965060209590950135949350505050565b6000815160a084526157ff60a085018261553f565b905060208301518482036020860152615818828261553f565b915050604083015161582d60408601826155ad565b506060830151848203606086015280516002811061584d5761584d615597565b80835250602081015190506040602083015261586c604083018261553f565b91505060808301518482036080860152612106828261553f565b60008151606084528051604060608601526158a460a086018261553f565b905060208201519150605f198582030160808601526158c3818361553f565b91505060208301516020850152604083015160408501528091505092915050565b805163ffffffff1682526000610120602083015161590a602086018263ffffffff169052565b5060408301518160408601526159228286018261553f565b9150506060830151848203606086015261593c82826157ea565b915050608083015184820360808601526159568282615886565b91505060a083015161597060a086018263ffffffff169052565b5060c083015184820360c0860152615988828261553f565b91505060e083015184820360e08601526159a2828261553f565b9150506101008084015185830382870152614b65838261553f565b60408152600083516040808401526159d8608084018261553f565b90506020850151603f198483030160608501526159f5828261553f565b915050828103602084015261210681856158e4565b600060208284031215615a1c57600080fd5b81518015158114612ca657600080fd5b8183823760009101908152919050565b600181811c90821680615a5057607f821691505b60208210811415615a7157634e487b7160e01b600052602260045260246000fd5b50919050565b604081526000615a8a60408301856158e4565b82810360208401528351608082528051905060206080830152615ab060a083018261553f565b905060208501518282036020840152615ac98282615886565b91505063ffffffff604086015116604083015260608501518282036060840152615af3828261553f565b979650505050505050565b604081526000615b116040830185615886565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015615b6057615b60615b38565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415615b8f57615b8f615b38565b5060010190565b600060208284031215615ba857600080fd5b8151612ca681615701565b60408101615bc182856155ad565b6001600160a01b039290921660209190910152919050565b60008219821115615bec57615bec615b38565b500190565b600063ffffffff808316818516808303821115615c1057615c10615b38565b01949350505050565b60008251615c2b81846020870161550f565b9190910192915050565b600080835481600182811c915080831680615c5157607f831692505b6020808410821415615c7157634e487b7160e01b86526022600452602486fd5b8180","15615c855760018114615c9657615cc3565b60ff19861689528489019650615cc3565b60008a81526020902060005b86811015615cbb5781548b820152908501908301615ca2565b505084890196505b509498975050505050505050565b600181815b80851115615d0c578160001904821115615cf257615cf2615b38565b80851615615cff57918102915b93841c9390800290615cd6565b509250929050565b600082615d23575060016107c2565b81615d30575060006107c2565b8160018114615d465760028114615d5057615d6c565b60019150506107c2565b60ff841115615d6157615d61615b38565b50506001821b6107c2565b5060208310610133831016604e8410600b8410161715615d8f575081810a6107c2565b615d998383615cd1565b8060001904821115615dad57615dad615b38565b029392505050565b6000612ca68383615d14565b600060ff821660ff84168060ff03821115615dde57615dde615b38565b019392505050565b600060ff821660ff841680821015615e0057615e00615b38565b90039392505050565b828152604060208201526000611c69604083018461553f565b600060208284031215615e3457600080fd5b505191905056fe63726f7373636861696e20636572742076616c69646174696f6e3a2074797065206f66207369676e65722063657274206d757374206265206263646e7363726f7373636861696e20636572742076616c69646174696f6e3a20696e76616c69642073696763726f7373636861696e20636572742076616c69646174696f6e3a2072657175697265206263646e7320726f6f74206f7220646f6d61696e207370616365206f776e65722063657274206173207369676e657263726f7373636861696e20636572742076616c69646174696f6e3a2077726f6e67207369676e6572a26469706673582212208a6c28e5c12a7adb367d404741fdfb723e36edb04272828c357338800c939fcc64736f6c634300080b0033"};
  
      public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);
  
      public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b50604051620082ff380380620082ff83398101604081905262000034916200209e565b6200003f336200005b565b6200004a81620000ab565b620000546200022f565b5062002383565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d09190a35050565b6000620000c382620002fc60201b620018891760201c565b9050600081604001516003811115620000e057620000e062002156565b146200013457604051636381e58960e11b815260206004820152601e60248201527f77726f6e67207479706520666f72206263646e7320726f6f742063657274000060448201526064015b60405180910390fd5b60006200016162000150836200056860201b62001a511760201c565b620006bb60201b62001b851760201c565b805190602001209050826001604051806040016040528060048152602001631c9bdbdd60e21b8152506040516200019991906200216c565b90815260200160405180910390209080519060200190620001bc92919062001e75565b5060408051808201825260048152631c9bdbdd60e21b602080830191825260008581526002909152929092209051620001f6929062001e75565b506040518181527f93e430b5dea7948b047f2309fc9ab945d4eea0d469ad3c8f561fdb6b88ff2a1e9060200160405180910390a1505050565b600054600160a81b900460ff16156200029c57604051636381e58960e11b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016200012b565b60005460ff600160a01b90910481161015620002fa576000805460ff60a01b191660ff60a01b17905560405160ff81527f962aa9df107bcee798aa1cede27b2de7fab57a1daae7109874a9a9170136cbfa9060200160405180910390a15b565b6200030662001f04565b6200031062001f04565b60006200032884620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f576000826020015182815181106200035657620003566200218a565b60200260200101519050600061ffff16816000015161ffff16141562000394576200038c8162000a1f60201b62001e581760201c565b845262000549565b805161ffff1660011415620003c457620003b98162000a1f60201b62001e581760201c565b602085015262000549565b805161ffff16600214156200043857620003e98162000a2660201b62001e5f1760201c565b60ff16600381111562000400576200040062002156565b8460400190600381111562000419576200041962002156565b908160038111156200042f576200042f62002156565b90525062000549565b805161ffff1660031415620004725762000467620004618262000a1f60201b62001e581760201c565b62000a4a565b606085015262000549565b805161ffff1660041415620004ab57620004978162000b6760201b62001e701760201c565b6001600160401b0316608085015262000549565b805161ffff1660051415620004e457620004d08162000b6760201b62001e701760201c565b6001600160401b031660a085015262000549565b805161ffff16600614156200051457620005098162000a1f60201b62001e581760201c565b60c085015262000549565b805161ffff16600714156200054957620005436200053d8262000a1f60201b62001e581760201c565b62000b9a565b60e08501525b50806200055681620021b6565b9150506200032d565b50909392505050565b6200057262001f8a565b6000826040015160038111156200058d576200058d62002156565b1415620005ae5760c0820151620005a49062000d17565b6020015192915050565b600182604001516003811115620005c957620005c962002156565b1415620005ea5760c0820151620005e09062000e24565b6080015192915050565b60028260400151600381111562000605576200060562002156565b1415620006265760c08201516200061c9062001005565b6060015192915050565b60038260400151600381111562000641576200064162002156565b1415620006625760c08201516200065890620011b6565b6040015192915050565b604051636381e58960e11b815260206004820152602660248201527f676574436572744f776e65724f69643a20636572742074797065206e6f7420736044820152651d5c1c1bdc9d60d21b60648201526084016200012b565b604080516002808252606082810190935260009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081620006d55790505090506200074c60006200073b856000015160018111156200072a576200072a62002156565b620012f360201b62001e891760201c565b6200130a60201b62001e9d1760201c565b816000815181106200076257620007626200218a565b602002602001018190525062000789600184602001516200138660201b62001f0a1760201c565b816001815181106200079f576200079f6200218a565b6020026020010181905250620007cc6040518060400160405280600061ffff168152602001606081525090565b818160200181905250620007eb81620013c960201b62001f4d1760201c565b949350505050565b6040805180820190915260008152606060208201526006825110156200085d57604051636381e58960e11b815260206004820152601760248201527f696c6c6567616c207261772064617461206c656e67746800000000000000000060448201526064016200012b565b6040805180820190915260008082526060602083015290620008a06200088f85846200154860201b620020521760201c565b6200157360201b6200207a1760201c565b61ffff168152620008b3600683620021d4565b91506000825b85518110156200093157620008fb620008ea87620008d9846002620021d4565b6200161b60201b6200211b1760201c565b6200164860201b620021451760201c565b62000908906006620021ef565b6200091a9063ffffffff1682620021d4565b9050816200092881620021b6565b925050620008b9565b6000826001600160401b038111156200094e576200094e62002055565b6040519080825280602002602001820160405280156200099d57816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200096d5790505b509050600092505b865185101562000a105760408051606080820183526000808352602083015291810191909152620009d788876200174f565b96509050808285620009e981620021b6565b965081518110620009fe57620009fe6200218a565b602002602001018190525050620009a5565b60208401525090949350505050565b6040015190565b600062000a4460018360400151620018db60201b6200223f1760201c565b92915050565b62000a5462001f8a565b62000a5e62001f8a565b600062000a7684620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f5760008260200151828151811062000aa45762000aa46200218a565b60200260200101519050600061ffff16816000015161ffff16141562000b265762000ada8162000a2660201b62001e5f1760201c565b60ff16600181111562000af15762000af162002156565b8490600181111562000b075762000b0762002156565b9081600181111562000b1d5762000b1d62002156565b90525062000b51565b805161ffff166001141562000b515762000b4b8162000a1f60201b62001e581760201c565b60208501525b508062000b5e81620021b6565b91505062000a7b565b600062000a4462000b8960088460400151620018db60201b6200223f1760201c565b620018e060201b620022441760201c565b62000bc66040518060800160405280606081526020016060815260200160608152602001606081525090565b62000bf26040518060800160405280606081526020016060815260200160608152602001606081525090565b600062000c0a84620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f5760008260200151828151811062000c385762000c386200218a565b60200260200101519050600061ffff16816000015161ffff16141562000c765762000c6e8162000a1f60201b62001e581760201c565b845262000d01565b805161ffff166001141562000ca65762000c9b8162000a1f60201b62001e581760201c565b602085015262000d01565b805161ffff166002141562000cd65762000ccb8162000a1f60201b62001e581760201c565b604085015262000d01565b805161ffff166003141562000d015762000cfb8162000a1f60201b62001e581760201c565b60608501525b508062000d0e81620021b6565b91505062000c0f565b62000d2162001fa5565b62000d2b62001fa5565b600062000d4384620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f5760008260200151828151811062000d715762000d716200218a565b60200260200101519050600061ffff16816000015161ffff16141562000daf5762000da78162000a1f60201b62001e581760201c565b845262000e0e565b805161ffff166001141562000de35762000dd8620004618262000a1f60201b62001e581760201c565b602085015262000e0e565b805161ffff166002141562000e0e5762000e088162000a1f60201b62001e581760201c565b60408501525b508062000e1b81620021b6565b91505062000d48565b62000e2e62001fc1565b62000e3862001fc1565b600062000e5084620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f5760008260200151828151811062000e7e5762000e7e6200218a565b60200260200101519050600061ffff16816000015161ffff16141562000ebc5762000eb48162000a1f60201b62001e581760201c565b845262000fef565b805161ffff166001141562000f305762000ee18162000a2660201b62001e5f1760201c565b60ff16600181111562000ef85762000ef862002156565b8460200190600181111562000f115762000f1162002156565b9081600181111562000f275762000f2762002156565b90525062000fef565b805161ffff166002141562000f605762000f558162000a1f60201b62001e581760201c565b604085015262000fef565b805161ffff166003141562000f905762000f858162000a1f60201b62001e581760201c565b606085015262000fef565b805161ffff166004141562000fc45762000fb9620004618262000a1f60201b62001e581760201c565b608085015262000fef565b805161ffff166005141562000fef5762000fe98162000a1f60201b62001e581760201c565b60a08501525b508062000ffc81620021b6565b915050","62000e55565b6200100f62001ff3565b6200101962001ff3565b60006200103184620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f576000826020015182815181106200105f576200105f6200218a565b60200260200101519050600061ffff16816000015161ffff1614156200109d57620010958162000a1f60201b62001e581760201c565b8452620011a0565b805161ffff1660011415620010cd57620010c28162000a1f60201b62001e581760201c565b6020850152620011a0565b805161ffff16600214156200114157620010f28162000a2660201b62001e5f1760201c565b60ff16600281111562001109576200110962002156565b8460400190600281111562001122576200112262002156565b9081600281111562001138576200113862002156565b905250620011a0565b805161ffff166003141562001175576200116a620004618262000a1f60201b62001e581760201c565b6060850152620011a0565b805161ffff1660041415620011a0576200119a8162000a1f60201b62001e581760201c565b60808501525b5080620011ad81620021b6565b91505062001036565b620011c06200201b565b620011ca6200201b565b6000620011e284620007f360201b62001c7c1760201c565b905060005b8160200151518110156200055f576000826020015182815181106200121057620012106200218a565b60200260200101519050600061ffff16816000015161ffff1614156200124e57620012468162000a1f60201b62001e581760201c565b8452620012dd565b805161ffff16600114156200127e57620012738162000a1f60201b62001e581760201c565b6020850152620012dd565b805161ffff1660031415620012b257620012a7620004618262000a1f60201b62001e581760201c565b6040850152620012dd565b805161ffff1660041415620012dd57620012d78162000a1f60201b62001e581760201c565b60608501525b5080620012ea81620021b6565b915050620011e7565b600081600181111562000a445762000a4462002156565b604080516060808201835260008083526020830181905282840191909152825160018082528185019094529192909190602082018180368337019050509050620013626001848362001ab760201b620024021760201c565b6040805160608101825261ffff959095168552600160208601528401525090919050565b60408051606080820183526000808352602083015291810191909152506040805160608101825261ffff939093168352815163ffffffff16602084015282015290565b60606000620013e38362001ac860201b620024131760201c565b90506000620013f4826006620021ef565b63ffffffff166001600160401b0381111562001414576200141462002055565b6040519080825280601f01601f1916602001820160405280156200143f576020820181803683370190505b5090506200147460026200146286600001516200157360201b6200207a1760201c565b8362001b5760201b620024871760201c565b620014a2600662001490846200164860201b620021451760201c565b8362001b6860201b620024981760201c565b600660005b620014bd8662001b7960201b620024a91760201c565b8110156200153e576000620014fd87602001518381518110620014e457620014e46200218a565b602002602001015162001b8160201b620024b11760201c565b90506200151783828662001c4360201b620025401760201c565b8051620015259084620021d4565b92505080806200153590620021b6565b915050620014a7565b5090949350505050565b81516000906200155a836002620021d4565b11156200156657600080fd5b50016002015161ffff1690565b60408051600280825281830190925260009160f084901b9183916020820181803683370190505090508160011a60f81b81600081518110620015b957620015b96200218a565b60200101906001600160f81b031916908160001a9053508160001a60f81b81600181518110620015ed57620015ed6200218a565b60200101906001600160f81b031916908160001a905350600062001612828262001548565b95945050505050565b81516000906200162d836004620021d4565b11156200163957600080fd5b50016004015163ffffffff1690565b60408051600480825281830190925260009160e084901b9183916020820181803683370190505090508160031a60f81b816000815181106200168e576200168e6200218a565b60200101906001600160f81b031916908160001a9053508160021a60f81b81600181518110620016c257620016c26200218a565b60200101906001600160f81b031916908160001a9053508160011a60f81b81600281518110620016f657620016f66200218a565b60200101906001600160f81b031916908160001a9053508160001a60f81b816003815181106200172a576200172a6200218a565b60200101906001600160f81b031916908160001a90535060006200161282826200161b565b60408051606080820183526000808352602083015291810191909152600082845111620017cc57604051636381e58960e11b815260206004820152602360248201527f6c656e677468206f66207261772064617461206c657373207468616e206f66666044820152621cd95d60ea1b60648201526084016200012b565b60068310156200181157604051636381e58960e11b815260206004820152600e60248201526d1a5b1b1959d85b081bd9999cd95d60921b60448201526064016200012b565b60408051606080820183526000808352602083015291810191909152620018486200088f86866200154860201b620020521760201c565b61ffff1681526200185b600285620021d4565b935062001878620008ea86866200161b60201b6200211b1760201c565b63ffffffff16602082015262001890600485620021d4565b9350620018b48585836020015163ffffffff1662001d3160201b620026251760201c565b60408201526020810151620018d09063ffffffff1685620021d4565b909590945092505050565b015190565b60408051600880825281830190925260009160c084901b9183916020820181803683370190505090508160071a60f81b816000815181106200192657620019266200218a565b60200101906001600160f81b031916908160001a9053508160061a60f81b816001815181106200195a576200195a6200218a565b60200101906001600160f81b031916908160001a9053508160051a60f81b816002815181106200198e576200198e6200218a565b60200101906001600160f81b031916908160001a9053508160041a60f81b81600381518110620019c257620019c26200218a565b60200101906001600160f81b031916908160001a9053508160031a60f81b81600481518110620019f657620019f66200218a565b60200101906001600160f81b031916908160001a9053508160021a60f81b8160058151811062001a2a5762001a2a6200218a565b60200101906001600160f81b031916908160001a9053508160011a60f81b8160068151811062001a5e5762001a5e6200218a565b60200101906001600160f81b031916908160001a9053508160001a60f81b8160078151811062001a925762001a926200218a565b60200101906001600160f81b031916908160001a905350600062001612828262001dbb565b909101600019810180519290915252565b600080805b62001ae38462001b7960201b620024a91760201c565b81101562001b505760008460200151828151811062001b065762001b066200218a565b6020026020010151905080604001515183600662001b259190620021ef565b63ffffffff1662001b379190620021d4565b925050808062001b4790620021b6565b91505062001acd565b5092915050565b909101600119810180519290915252565b909101600319810180519290915252565b602001515190565b606060008260200151600662001b989190620021ef565b63ffffffff166001600160401b0381111562001bb85762001bb862002055565b6040519080825280601f01601f19166020018201604052801562001be3576020820181803683370190505b50905062001c0660026200146285600001516200157360201b6200207a1760201c565b62001c2660066200149085602001516200164860201b620021451760201c565b62000a44600684604001518362001c4360201b620025401760201c565b8151815162001c5963ffffffff831686620021d4565b111562001cdb57604051636381e58960e11b815260206004820152604260248201527f7661724279746573546f4279746573426967456e6469616e3a206f666673657460448201527f2069732067726561746572207468616e20746865206f7574707574206c656e676064820152610e8d60f31b608482015260a4016200012b565b8015801562001cea5762001d2a565b8483018051601f84168015602002818801018581018215602002838601015b8183101562001d2357825181526020928301920162001d09565b5050509152505b5050505050565b825160609062001d428385620021d4565b111562001d4e57600080fd5b6000826001600160401b0381111562001d6b5762001d6b62002055565b6040519080825280601f01601f19166020018201604052801562001d96576020820181803683370190505b5090506020808201908686010162001db082828762001deb565b509095945050505050565b815160009062001dcd836008620021d4565b111562001dd957600080fd5b5001600801516001600160401b031690565b6020811062001e2b578151835262001e05602084620021d4565b925062001e14602083620021d4565b915062001e236020826200221a565b905062001deb565b8062001e3657505050565b6000600162001e478360206200221a565b62001e559061010062002331565b62001e6191906200221a565b925184518416931916929092179092525050565b82805462001e839062002346565b90600052602060002090601f01602090048101928262001ea7576000855562001ef2565b82601f1062001ec257805160ff191683800117855562001ef2565b8280016001018555821562001ef2579182015b8281111562001ef257825182559160200191906001019062001ed5565b5062001f009291506200203e565b5090565b6040805161010081018252606080825260208201529081016000815260200162001f2d62001f8a565b815260200160006001600160401b0316815260200160006001600160401b031681526020016060815260200162001f856040518060800160405280606081526020016060815260200160608152602001606081525090565b905290565b604080518082019091528060005b8152602001606081525090565b60405180606001604052806060815260200162001f9862001f8a565b6040805160c08101909152606081526020810160008152602001606081526020016060815260200162001f9862001f8a565b6040805160a0810182526060","80825260208201529081016000815260200162001f9862001f8a565b6040518060800160405280606081526020016060815260200162001f9862001f8a565b5b8082111562001f0057600081556001016200203f565b63b95aa35560e01b600052604160045260246000fd5b60005b83811015620020885781810151838201526020016200206e565b8381111562002098576000848401525b50505050565b600060208284031215620020b157600080fd5b81516001600160401b0380821115620020c957600080fd5b818401915084601f830112620020de57600080fd5b815181811115620020f357620020f362002055565b604051601f8201601f19908116603f011681019083821181831017156200211e576200211e62002055565b816040528281528760208487010111156200213857600080fd5b6200214b8360208301602088016200206b565b979650505050505050565b63b95aa35560e01b600052602160045260246000fd5b60008251620021808184602087016200206b565b9190910192915050565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b6000600019821415620021cd57620021cd620021a0565b5060010190565b60008219821115620021ea57620021ea620021a0565b500190565b600063ffffffff808316818516808303821115620022115762002211620021a0565b01949350505050565b6000828210156200222f576200222f620021a0565b500390565b600181815b8085111562002275578160001904821115620022595762002259620021a0565b808516156200226757918102915b93841c939080029062002239565b509250929050565b6000826200228e5750600162000a44565b816200229d5750600062000a44565b8160018114620022b65760028114620022c157620022e1565b600191505062000a44565b60ff841115620022d557620022d5620021a0565b50506001821b62000a44565b5060208310610133831016604e8410600b841016171562002306575081810a62000a44565b62002312838362002234565b8060001904821115620023295762002329620021a0565b029392505050565b60006200233f83836200227d565b9392505050565b600181811c908216806200235b57607f821691505b602082108114156200237d5763b95aa35560e01b600052602260045260246000fd5b50919050565b615f6c80620023936000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063a5cc4ca0116100c3578063cdb504551161007c578063cdb5045514610302578063d7720a8d14610315578063d86e29e214610328578063da5052da14610330578063ec449a9614610343578063f63da9e51461035657600080fd5b8063a5cc4ca014610290578063b386cc56146102a3578063b4b5f0c6146102b6578063ba057553146102c9578063c069ac27146102dc578063c3482f37146102ef57600080fd5b80635089e2c8116101155780635089e2c8146102035780636040d0a014610214578063674dbe1014610229578063719c6be81461025757806386dc270d1461026a57806387218e821461027d57600080fd5b8063091fed3d1461015257806316cad12a1461017a5780631cc42afb1461018f5780631cce0a86146101af5780634fe09e43146101f0575b600080fd5b6101656101603660046154ea565b610376565b60405190151581526020015b60405180910390f35b61018d61018836600461552b565b6103bd565b005b6101a261019d366004615554565b61043c565b604051610171919061560f565b6101d86101bd36600461562f565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610171565b61018d6101fe3660046156d7565b610514565b6000546001600160a01b03166101d8565b61021c61064d565b6040516101719190615749565b610249610237366004615794565b60046020526000908152604090205481565b604051908152602001610171565b61018d6102653660046154ea565b6106d5565b6101a26102783660046154ea565b61091a565b61018d61028b36600461552b565b6109f5565b6101a261029e366004615794565b610be1565b6101a26102b13660046156d7565b610c7b565b61018d6102c43660046154ea565b610c9f565b6101a26102d73660046154ea565b611002565b6101a26102ea3660046157ad565b6110c2565b61018d6102fd3660046154ea565b61110d565b610165610310366004615554565b611499565b61018d61032336600461562f565b6114f7565b61018d611757565b6101a261033e366004615794565b61176b565b6101656103513660046157ad565b611809565b610369610364366004615794565b611855565b60405161017191906157f8565b60008060036000858560405161038d929190615806565b6040518091039020815260200190815260200160002060000180546103b190615816565b90501190505b92915050565b6103c56126a6565b6001600160a01b03811661043057604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61043981612701565b50565b6060600460008585604051610452929190615806565b6040518091039020815260200190815260200160002060010160008363ffffffff168152602001908152602001600020805461048d90615816565b80601f01602080910402602001604051908101604052809291908181526020018280546104b990615816565b80156105065780601f106104db57610100808354040283529160200191610506565b820191906000526020600020905b8154815290600101906020018083116104e957829003601f168201915b505050505090509392505050565b600054600160a81b900460ff161580801561053c57506000546001600160a01b90910460ff16105b8061055d5750303b15801561055d5750600054600160a01b900460ff166001145b6105c157604051636381e58960e11b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610427565b6000805460ff60a01b1916600160a01b17905580156105ee576000805460ff60a81b1916600160a81b1790555b6105f782612751565b61060033612701565b8015610649576000805460ff60a81b19169055604051600181527f962aa9df107bcee798aa1cede27b2de7fab57a1daae7109874a9a9170136cbfa906020015b60405180910390a15b5050565b606060068054806020026020016040519081016040528092919081815260200182805480156106cb57602002820191906000526020600020906000905b82829054906101000a900460ff1660028111156106a9576106a961571f565b81526020600192830181810494850194909303909202910180841161068a5790505b5050505050905090565b6106dd6126a6565b600061071e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061289f92505050565b9050610729816129e0565b600061073482612c07565b6000818152600360205260408120805492935091829061075390615816565b9050111561083c57610766818686615154565b505b60608301516020810151519051101561083757600061078a8460600151612c27565b600081815260018401602052604090208054919250906107a990615816565b15159050610822576107be8460600151612c3a565b6000828152600184016020908152604090912082516107e393919291909101906151d8565b5060408051848152602081018390527f54be05179495d79308b555ea9a902ba1e042e9c9454989365920b7ebe13bd3f6910160405180910390a1610831565b61082f8460600151612c3a565b505b50610768565b610913565b610847818686615154565b505b6060830151602081015151905110156108df57600061086b8460600151612c27565b905061087a8460600151612c3a565b60008281526001840160209081526040909120825161089f93919291909101906151d8565b5060408051848152602081018390527f54be05179495d79308b555ea9a902ba1e042e9c9454989365920b7ebe13bd3f6910160405180910390a150610849565b6040518281527f3e0d464c0b26534b34562cc94eef50ef9280129ddcafee0815694b2981a9317e9060200160405180910390a15b5050505050565b60606000600460008585604051610932929190615806565b60405180910390208152602001908152602001600020905080600101600082600001548152602001908152602001600020805461096e90615816565b80601f016020809104026020016040519081016040528092919081815260200182805461099a90615816565b80156109e75780601f106109bc576101008083540402835291602001916109e7565b820191906000526020600020905b8154815290600101906020018083116109ca57829003601f168201915b505050505091505092915050565b6109fd6126a6565b6000816001600160a01b0316631272ad586040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a639190615851565b90506000600581836002811115610a7c57610a7c61571f565b6002811115610a8d57610a8d61571f565b81526020810191909152604001600020546001600160a01b031614610af557604051636381e58960e11b815260206004820152601b60248201527f70746320766572696669657220616c72656164792065786973747300000000006044820152606401610427565b600680546001810182556000919091527fa26d67b36928e909a2a4db51de73963e974ca036ae1fd765867a117ed4543616602082040180548392601f166101000a60ff81021990911690836002811115610b5157610b5161571f565b02179055508160056000836002811115610b6d57610b6d61571f565b6002811115610b7e57610b7e61571f565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507fcec9da05ac4bb94bd17cf7f73b1cf870b87e983fafc5f53a58e79aa8ba311d8b818360405161064092919061586e565b60026020526000908152604090208054610bfa90615816565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2690615816565b8015610c735780601f10610c4857610100808354040283529160200191610c73565b820191906000526020600020905b815481529060010190602001808311610c5657829003","601f168201915b505050505081565b805160208183018101805160018252928201919093012091528054610bfa90615816565b6000610ce083838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ce192505050565b90506000610cf18260200151612de0565b805160208083019190912060009081526004825260408082208682015163ffffffff16835260010190925290812080549293509091610d2f90615816565b905011610d7357604051636381e58960e11b815260206004820152601160248201527009dd1c189d1849c81b9bdd08199bdd5b99607a1b6044820152606401610427565b6000610d8982846040015163ffffffff16613070565b9050610d9c816060015160600151613135565b610de357604051636381e58960e11b81526020600482015260176024820152761b9bc81c1d18c81d1c9d5cdd081c9bdbdd08199bdd5b99604a1b6044820152606401610427565b6000610df6826060015160600151613172565b90506000610e078360400151613230565b9050610e1b836060015160600151826132ed565b610e6857604051636381e58960e11b815260206004820152601a60248201527f6e6f207074632076657269667920616e63686f7220666f756e640000000000006044820152606401610427565b600060056000610e7f856020015160c00151613331565b604001516002811115610e9457610e9461571f565b6002811115610ea557610ea561571f565b81526020810191909152604001600020546001600160a01b0316905080610f0457604051636381e58960e11b81526020600482015260126024820152711b9bc81c1d18c81d995a599a595c881cd95d60721b6044820152606401610427565b604051635158256d60e11b81526000906001600160a01b0383169063a2b04ada90610f359088908b90600401615a67565b6020604051808303816000875af1158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f789190615aee565b90507f65f171de652251c9e9201eea4542f70c250bb2d3feb9b3154f0da78b86245cd9856080015182604051610faf929190615b10565b60405180910390a180610ff757604051636381e58960e11b815260206004820152600f60248201526e766572696679206e6f74207061737360881b6044820152606401610427565b505050505050505050565b6060600360008484604051611018929190615806565b60405180910390208152602001908152602001600020600001805461103c90615816565b80601f016020809104026020016040519081016040528092919081815260200182805461106890615816565b80156110b55780601f1061108a576101008083540402835291602001916110b5565b820191906000526020600020905b81548152906001019060200180831161109857829003601f168201915b5050505050905092915050565b60606003600085856040516110d8929190615806565b604051809103902081526020019081526020016000206001016000838152602001908152602001600020805461048d90615816565b6111156126a6565b600061115683838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061346c92505050565b9050611169816060015160600151613135565b6111b057604051636381e58960e11b81526020600482015260176024820152761b9bc81c1d18c81d1c9d5cdd081c9bdbdd08199bdd5b99604a1b6044820152606401610427565b60006111c3826060015160600151613172565b905060006111d48360400151613230565b90506111e8836060015160600151826132ed565b61123557604051636381e58960e11b815260206004820152601a60248201527f6e6f207074632076657269667920616e63686f7220666f756e640000000000006044820152606401610427565b60006005600061124c856020015160c00151613331565b6040015160028111156112615761126161571f565b60028111156112725761127261571f565b81526020810191909152604001600020546001600160a01b03169050806112d157604051636381e58960e11b81526020600482015260126024820152711b9bc81c1d18c81d995a599a595c881cd95d60721b6044820152606401610427565b806001600160a01b031663e0b011b86112f286606001516060015185613609565b866040518363ffffffff1660e01b8152600401611310929190615b34565b6020604051808303816000875af115801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190615aee565b61139957604051636381e58960e11b81526020600482015260166024820152756661696c656420746f2076657269667920747062746160501b6044820152606401610427565b60006113a88560800151612de0565b80516020918201206000818152600483526040902091870151825491935063ffffffff16111561141b5760208681015163ffffffff1680835560408051858152928301919091527fcfec0a46c6e624ac6f78c0c3ac81bb6c3acafaaa42ab41247bdbb1f2f8926acb910160405180910390a15b60208087015163ffffffff1660009081526001830190915260409020611442908989615154565b507fe7da5c48d6b9115684cdf93d22bc820fde23884efcab14ae8ca820a51d858b5882876020015160405161148792919091825263ffffffff16602082015260400190565b60405180910390a15050505050505050565b6000806004600086866040516114b0929190615806565b6040518091039020815260200190815260200160002060010160008463ffffffff16815260200190815260200160002080546114eb90615816565b90501190509392505050565b6114ff6126a6565b60006005818360028111156115165761151661571f565b60028111156115275761152761571f565b81526020810191909152604001600020546001600160a01b0316141561159057604051636381e58960e11b815260206004820152601760248201527f707463207665726966696572206e6f74206578697374730000000000000000006044820152606401610427565b60015b6006548110156116d6578160028111156115af576115af61571f565b600682815481106115c2576115c2615b81565b90600052602060002090602091828204019190069054906101000a900460ff1660028111156115f3576115f361571f565b14156116c4576006805461160990600190615bad565b8154811061161957611619615b81565b90600052602060002090602091828204019190069054906101000a900460ff166006828154811061164c5761164c615b81565b90600052602060002090602091828204019190066101000a81548160ff0219169083600281111561167f5761167f61571f565b0217905550600680548061169557611695615bc4565b60019003818190600052602060002090602091828204019190066101000a81549060ff021916905590556116d6565b806116ce81615bda565b915050611593565b50600560008260028111156116ed576116ed61571f565b60028111156116fe576116fe61571f565b81526020810191909152604090810160002080546001600160a01b0319169055517f57edd695794597830277338ba9cfc1b6b1781173f9a193504e19bd79f8d5a97a9061174c9083906157f8565b60405180910390a150565b61175f6126a6565b6117696000612701565b565b60036020526000908152604090208054819061178690615816565b80601f01602080910402602001604051908101604052809291908181526020018280546117b290615816565b80156117ff5780601f106117d4576101008083540402835291602001916117ff565b820191906000526020600020905b8154815290600101906020018083116117e257829003601f168201915b5050505050905081565b600080600360008686604051611820929190615806565b60405180910390208152602001908152602001600020600101600084815260200190815260200160002080546114eb90615816565b6006818154811061186557600080fd5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b61189161524c565b61189961524c565b60006118a484611c7c565b905060005b816020015151811015611a48576000826020015182815181106118ce576118ce615b81565b60200260200101519050600061ffff16816000015161ffff1614156118f95760408101518452611a35565b805161ffff16600114156119165760408101516020850152611a35565b805161ffff16600214156119725761192d81611e5f565b60ff1660038111156119415761194161571f565b846040019060038111156119575761195761571f565b9081600381111561196a5761196a61571f565b905250611a35565b805161ffff166003141561199d5761199361198e826040015190565b6136e4565b6060850152611a35565b805161ffff16600414156119c7576119b481611e70565b6001600160401b03166080850152611a35565b805161ffff16600514156119f1576119de81611e70565b6001600160401b031660a0850152611a35565b805161ffff1660061415611a0e57604081015160c0850152611a35565b805161ffff1660071415611a3557611a2f611a2a826040015190565b6137bf565b60e08501525b5080611a4081615bda565b9150506118a9565b50909392505050565b611a596152cf565b600082604001516003811115611a7157611a7161571f565b1415611a8e57611a848260c001516138db565b6020015192915050565b600182604001516003811115611aa657611aa661571f565b1415611ac357611ab98260c0015161399d565b6080015192915050565b600282604001516003811115611adb57611adb61571f565b1415611af857611aee8260c00151613331565b6060015192915050565b600382604001516003811115611b1057611b1061571f565b1415611b2d57611b238260c00151613af5565b6040015192915050565b604051636381e58960e11b815260206004820152602660248201527f676574436572744f776e65724f69643a20636572742074797065206e6f7420736044820152651d5c1c1bdc9d60d21b6064820152608401610427565b604080516002808252606082810190935260009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081611b9f579050509050611bf86000611bf385600001516001811115611bee57611bee61571f565b611e89565b611e9d565b81600081518110611c0b57611c0b615b81565b6020026020010181905250611c2560018460200151611f0a565b81600181518110611c3857611c38615b81565b6020026020010181905250611c646040518060400160405280600061ffff168152602001606081525090565b6020810182905261","1c7481611f4d565b949350505050565b604080518082019091526000815260606020820152600682511015611ce457604051636381e58960e11b815260206004820152601760248201527f696c6c6567616c207261772064617461206c656e6774680000000000000000006044820152606401610427565b6040805180820190915260008082526060602083015290611d0d611d088584612052565b61207a565b61ffff168152611d1e600683615bf5565b91506000825b8551811015611d7857611d49611d4487611d3f846002615bf5565b61211b565b612145565b611d54906006615c0d565b611d649063ffffffff1682615bf5565b905081611d7081615bda565b925050611d24565b6000826001600160401b03811115611d9257611d9261564c565b604051908082528060200260200182016040528015611ddf57816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081611db05790505b509050600092505b8651851015611e495760408051606080820183526000808352602083015291810191909152611e168887613bd4565b96509050808285611e2681615bda565b965081518110611e3857611e38615b81565b602002602001018190525050611de7565b60208401525090949350505050565b6040015190565b60006103b760018360400151015190565b60006103b7611e8460088460400151015190565b612244565b60008160018111156103b7576103b761571f565b60408051606080820183526000808352602083015291810191909152604080516001808252818301909252600091602082018180368337019050509050611ee660018483612402565b6040805160608101825261ffff959095168552600160208601528401525090919050565b60408051606080820183526000808352602083015291810191909152506040805160608101825261ffff939093168352815163ffffffff16602084015282015290565b60606000611f5a83612413565b90506000611f69826006615c0d565b63ffffffff166001600160401b03811115611f8657611f8661564c565b6040519080825280601f01601f191660200182016040528015611fb0576020820181803683370190505b509050611fcb6002611fc5866000015161207a565b83612487565b611fdf6006611fd984612145565b83612498565b600660005b6020860151518110156120485760006120198760200151838151811061200c5761200c615b81565b60200260200101516124b1565b9050612026838286612540565b80516120329084615bf5565b925050808061204090615bda565b915050611fe4565b5090949350505050565b8151600090612062836002615bf5565b111561206d57600080fd5b50016002015161ffff1690565b60408051600280825281830190925260009160f084901b9183916020820181803683370190505090508160011a60f81b816000815181106120bd576120bd615b81565b60200101906001600160f81b031916908160001a9053508160001a60f81b816001815181106120ee576120ee615b81565b60200101906001600160f81b031916908160001a9053506000612112826000612052565b95945050505050565b815160009061212b836004615bf5565b111561213657600080fd5b50016004015163ffffffff1690565b60408051600480825281830190925260009160e084901b9183916020820181803683370190505090508160031a60f81b8160008151811061218857612188615b81565b60200101906001600160f81b031916908160001a9053508160021a60f81b816001815181106121b9576121b9615b81565b60200101906001600160f81b031916908160001a9053508160011a60f81b816002815181106121ea576121ea615b81565b60200101906001600160f81b031916908160001a9053508160001a60f81b8160038151811061221b5761221b615b81565b60200101906001600160f81b031916908160001a905350600061211282600061211b565b015190565b60408051600880825281830190925260009160c084901b9183916020820181803683370190505090508160071a60f81b8160008151811061228757612287615b81565b60200101906001600160f81b031916908160001a9053508160061a60f81b816001815181106122b8576122b8615b81565b60200101906001600160f81b031916908160001a9053508160051a60f81b816002815181106122e9576122e9615b81565b60200101906001600160f81b031916908160001a9053508160041a60f81b8160038151811061231a5761231a615b81565b60200101906001600160f81b031916908160001a9053508160031a60f81b8160048151811061234b5761234b615b81565b60200101906001600160f81b031916908160001a9053508160021a60f81b8160058151811061237c5761237c615b81565b60200101906001600160f81b031916908160001a9053508160011a60f81b816006815181106123ad576123ad615b81565b60200101906001600160f81b031916908160001a9053508160001a60f81b816007815181106123de576123de615b81565b60200101906001600160f81b031916908160001a9053506000612112826000613d31565b909101600019810180519290915252565b600080805b6020840151518110156124805760008460200151828151811061243d5761243d615b81565b6020026020010151905080604001515183600661245a9190615c0d565b63ffffffff1661246a9190615bf5565b925050808061247890615bda565b915050612418565b5092915050565b909101600119810180519290915252565b909101600319810180519290915252565b602001515190565b60606000826020015160066124c69190615c0d565b63ffffffff166001600160401b038111156124e3576124e361564c565b6040519080825280601f01601f19166020018201604052801561250d576020820181803683370190505b5090506125226002611fc5856000015161207a565b6125346006611fd98560200151612145565b6103b760068460400151835b8151815161255463ffffffff831686615bf5565b11156125d457604051636381e58960e11b815260206004820152604260248201527f7661724279746573546f4279746573426967456e6469616e3a206f666673657460448201527f2069732067726561746572207468616e20746865206f7574707574206c656e676064820152610e8d60f31b608482015260a401610427565b801580156125e157610913565b8483018051601f84168015602002818801018581018215602002838601015b81831015612618578251815260209283019201612600565b5050509152505050505050565b82516060906126348385615bf5565b111561263f57600080fd5b6000826001600160401b038111156126595761265961564c565b6040519080825280601f01601f191660200182016040528015612683576020820181803683370190505b5090506020808201908686010161269b828287613d5e565b509095945050505050565b6000546001600160a01b0316331461176957604051636381e58960e11b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610427565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d09190a35050565b600061275c82611889565b90506000816040015160038111156127765761277661571f565b146127c457604051636381e58960e11b815260206004820152601e60248201527f77726f6e67207479706520666f72206263646e7320726f6f74206365727400006044820152606401610427565b60006127d76127d283611a51565b611b85565b805190602001209050826001604051806040016040528060048152602001631c9bdbdd60e21b81525060405161280d9190615c35565b9081526020016040518091039020908051906020019061282e9291906151d8565b5060408051808201825260048152631c9bdbdd60e21b60208083019182526000858152600290915292909220905161286692906151d8565b506040518181527f93e430b5dea7948b047f2309fc9ab945d4eea0d469ad3c8f561fdb6b88ff2a1e9060200160405180910390a1505050565b6128a76152ea565b6128af6152ea565b60006128ba84611c7c565b905060005b816020015151811015611a48576000826020015182815181106128e4576128e4615b81565b60200260200101519050600061ffff16816000015161ffff16141561290f57604081015184526129cd565b805161ffff166001141561293a5761293061292b826040015190565b611889565b60208501526129cd565b805161ffff166002141561295757604081015160408501526129cd565b805161ffff1660031415612997576040805180820182526000808252606060209283015282518084018452908152918301519082015260608501526129cd565b805161ffff16600414156129b457604081015160808501526129cd565b805161ffff16600514156129cd57604081015160a08501525b50806129d881615bda565b9150506128bf565b60006129f3826020015160600151611b85565b80516020918201206000818152600290925260408220805491935090612a1890615816565b905011612a5b57604051636381e58960e11b815260206004820152601060248201526f1a5cdcdd595c881b9bdd08199bdd5b9960821b6044820152606401610427565b6000818152600260205260408082209051612b1991600191612a7d9190615c51565b90815260200160405180910390208054612a9690615816565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac290615816565b8015612b0f5780601f10612ae457610100808354040283529160200191612b0f565b820191906000526020600020905b815481529060010190602001808311612af257829003601f168201915b5050505050611889565b9050612b64604051806040016040528060168152602001754b656363616b32353657697468536563703235366b3160501b8152508260e0015160400151613dd990919063ffffffff16565b15612bac57600080612b83838660200151613def90919063ffffffff16565b91509150818190612ba857604051636381e58960e11b8152600401610427919061560f565b5050505b612bb583613f83565b612c0257604051636381e58960e11b815260206004820152601a60248201527f70746320747275737420726f6f742073696720696e76616c69640000000000006044820152606401610427565b505050565b6000612c196127d28360200151611a51565b805190602001209050919050565b60006103b7612c3583612c3a565b613230565b6060816020015151826000015110612ca957604051636381e58960e11b815260206004820152602b60248201527f544c5649","74656d4d617056616c756553747265616d3a206f6666657374206f7560448201526a3a1037b310313ab33332b960a91b6064820152608401610427565b6000612cbd83600001518460200151613fad565b8051845191925090612cd0906004615bf5565b612cda9190615bf5565b9092525090565b612ce9615341565b612cf1615341565b6000612cfc84611c7c565b905060005b816020015151811015611a4857600082602001518281518110612d2657612d26615b81565b60200260200101519050600561ffff16816000015161ffff161415612d5f57612d58612d53826040015190565b614041565b8452612dcd565b805161ffff166101011415612d8b57612d81612d7c826040015190565b6140ce565b6020850152612dcd565b805161ffff166101001415612db357612da3816141c1565b63ffffffff166040850152612dcd565b805161ffff166101ff1415612dcd57604081015160608501525b5080612dd881615bda565b915050612d01565b60208101516060908190158015612df957506040830151155b15612e7e5760408051600180825281830190925290816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081612e13579050509050612e5b6000612e5685600001516141d5565b611f0a565b81600081518110612e6e57612e6e615b81565b6020026020010181905250613056565b602083015115801590612e945750604083015115155b1561300d576040805160038082526080820190925290816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081612eaf579050509050612ef26000612e5685600001516141d5565b81600081518110612f0557612f05615b81565b6020026020010181905250600060206001600160401b03811115612f2b57612f2b61564c565b6040519080825280601f01601f191660200182016040528015612f55576020820181803683370190505b50602085810151908201529050612f6d600182611f0a565b82600181518110612f8057612f80615b81565b6020026020010181905250600060206001600160401b03811115612fa657612fa661564c565b6040519080825280601f01601f191660200182016040528015612fd0576020820181803683370190505b50604086015160208201529050612fe8600282611f0a565b83600281518110612ffb57612ffb615b81565b60200260200101819052505050613056565b604051636381e58960e11b815260206004820152601760248201527f696e76616c69642063726f7373636861696e206c616e650000000000000000006044820152606401610427565b604080518082019091526000815260606020820152611c64565b613078615377565b8251602080850191909120600090815260048252604080822085835260010190925220805461312e91906130ab90615816565b80601f01602080910402602001604051908101604052809291908181526020018280546130d790615816565b80156131245780601f106130f957610100808354040283529160200191613124565b820191906000526020600020905b81548152906001019060200180831161310757829003601f168201915b505050505061346c565b9392505050565b6000806003600061314585611b85565b805190602001208152602001908152602001600020600001805461316890615816565b9050119050919050565b61317a6152ea565b6103b76003600061318a85611b85565b80519060200120815260200190815260200160002060000180546131ad90615816565b80601f01602080910402602001604051908101604052809291908181526020018280546131d990615816565b80156132265780601f106131fb57610100808354040283529160200191613226565b820191906000526020600020905b81548152906001019060200180831161320957829003601f168201915b505050505061289f565b8051600090602081111561329357604051636381e58960e11b815260206004820152602360248201527f333262797465732062696720696e7465676572206174206d6f737420666f72206044820152626e6f7760e81b6064820152608401610427565b6000816001600160401b038111156132ad576132ad61564c565b6040519080825280601f01601f1916602001820160405280156132d7576020820181803683370190505b5084518152938201519190930151900392915050565b600080600360006132fd86611b85565b805190602001208152602001908152602001600020600101600084815260200190815260200160002080546103b190615816565b6133396153d4565b6133416153d4565b600061334c84611c7c565b905060005b816020015151811015611a485760008260200151828151811061337657613376615b81565b60200260200101519050600061ffff16816000015161ffff1614156133a15760408101518452613459565b805161ffff16600114156133be5760408101516020850152613459565b805161ffff166002141561341a576133d581611e5f565b60ff1660028111156133e9576133e961571f565b846040019060028111156133ff576133ff61571f565b908160028111156134125761341261571f565b905250613459565b805161ffff16600314156134405761343661198e826040015190565b6060850152613459565b805161ffff166004141561345957604081015160808501525b508061346481615bda565b915050613351565b613474615377565b61347c615377565b600061348784611c7c565b905060005b816020015151811015611a48576000826020015182815181106134b1576134b1615b81565b60200260200101519050600061ffff16816000015161ffff1614156134e6576134d9816141c1565b63ffffffff1684526135f6565b805161ffff166001141561350d576134fd816141c1565b63ffffffff1660208501526135f6565b805161ffff166002141561352a57604081015160408501526135f6565b805161ffff16600314156135555761354b613546826040015190565b613331565b60608501526135f6565b805161ffff166004141561357b57613571612d7c826040015190565b60808501526135f6565b805161ffff16600514156135a257613592816141c1565b63ffffffff1660a08501526135f6565b805161ffff16600614156135bf57604081015160c08501526135f6565b805161ffff16600714156135dc57604081015160e08501526135f6565b805161ffff1660ff14156135f65760408101516101008501525b508061360181615bda565b91505061348c565b604080518082019091526060808252602082015261312e6003600061362d86611b85565b8051906020012081526020019081526020016000206001016000848152602001908152602001600020805461366190615816565b80601f016020809104026020016040519081016040528092919081815260200182805461368d90615816565b80156136da5780601f106136af576101008083540402835291602001916136da565b820191906000526020600020905b8154815290600101906020018083116136bd57829003601f168201915b50505050506142e4565b6136ec6152cf565b6136f46152cf565b60006136ff84611c7c565b905060005b816020015151811015611a485760008260200151828151811061372957613729615b81565b60200260200101519050600061ffff16816000015161ffff1614156137935761375181611e5f565b60ff1660018111156137655761376561571f565b849060018111156137785761377861571f565b9081600181111561378b5761378b61571f565b9052506137ac565b805161ffff16600114156137ac57604081015160208501525b50806137b781615bda565b915050613704565b6137ea6040518060800160405280606081526020016060815260200160608152602001606081525090565b6138156040518060800160405280606081526020016060815260200160608152602001606081525090565b600061382084611c7c565b905060005b816020015151811015611a485760008260200151828151811061384a5761384a615b81565b60200260200101519050600061ffff16816000015161ffff16141561387557604081015184526138c8565b805161ffff166001141561389257604081015160208501526138c8565b805161ffff16600214156138af57604081015160408501526138c8565b805161ffff16600314156138c857604081015160608501525b50806138d381615bda565b915050613825565b6138e36153fa565b6138eb6153fa565b60006138f684611c7c565b905060005b816020015151811015611a485760008260200151828151811061392057613920615b81565b60200260200101519050600061ffff16816000015161ffff16141561394b576040810151845261398a565b805161ffff16600114156139715761396761198e826040015190565b602085015261398a565b805161ffff166002141561398a57604081015160408501525b508061399581615bda565b9150506138fb565b6139a5615414565b6139ad615414565b60006139b884611c7c565b905060005b816020015151811015611a48576000826020015182815181106139e2576139e2615b81565b60200260200101519050600061ffff16816000015161ffff161415613a0d5760408101518452613ae2565b805161ffff1660011415613a6957613a2481611e5f565b60ff166001811115613a3857613a3861571f565b84602001906001811115613a4e57613a4e61571f565b90816001811115613a6157613a6161571f565b905250613ae2565b805161ffff1660021415613a865760408101516040850152613ae2565b805161ffff1660031415613aa35760408101516060850152613ae2565b805161ffff1660041415613ac957613abf61198e826040015190565b6080850152613ae2565b805161ffff1660051415613ae257604081015160a08501525b5080613aed81615bda565b9150506139bd565b613afd615444565b613b05615444565b6000613b1084611c7c565b905060005b816020015151811015611a4857600082602001518281518110613b3a57613b3a615b81565b60200260200101519050600061ffff16816000015161ffff161415613b655760408101518452613bc1565b805161ffff1660011415613b825760408101516020850152613bc1565b805161ffff1660031415613ba857613b9e61198e826040015190565b6040850152613bc1565b805161ffff1660041415613bc157604081015160608501525b5080613bcc81615bda565b915050613b15565b60408051606080820183526000808352602083015291810191909152600082845111613c4f57604051636381e58960e11b815260206004820152602360248201527f6c656e677468206f66207261772064617461206c657373207468616e206f66666044820152621cd95d60ea1b6064820152608401610427565b6006831015613c9257604051636381e58960e11b815260206004820152","600e60248201526d1a5b1b1959d85b081bd9999cd95d60921b6044820152606401610427565b60408051606080820183526000808352602083015291810191909152613cbb611d088686612052565b61ffff168152613ccc600285615bf5565b9350613cdb611d44868661211b565b63ffffffff166020820152613cf1600485615bf5565b9350613d088585836020015163ffffffff16612625565b60408201526020810151613d229063ffffffff1685615bf5565b935091508290505b9250929050565b8151600090613d41836008615bf5565b1115613d4c57600080fd5b5001600801516001600160401b031690565b60208110613d965781518352613d75602084615bf5565b9250613d82602083615bf5565b9150613d8f602082615bad565b9050613d5e565b80613da057505050565b60006001613daf836020615bad565b613dbb90610100615dd1565b613dc59190615bad565b925184518416931916929092179092525050565b8051602091820120825192909101919091201490565b600060608183604001516003811115613e0a57613e0a61571f565b1415613e6b576000613e1f8460c001516138db565b9050613e3c8160200151866060015161439890919063ffffffff16565b613e65576000604051806060016040528060288152602001615eab602891399250925050613d2a565b50613f13565b600183604001516003811115613e8357613e8361571f565b1415613eef576000613e988460c0015161399d565b9050600181602001516001811115613eb257613eb261571f565b14613edc576000604051806080016040528060538152602001615e58605391399250925050613d2a565b60808101516060860151613e3c91614398565b60006040518060600160405280603d8152602001615efa603d913991509150613d2a565b613f3f8460e0015160400151613f28856143c3565b613f31876144e9565b8760e001516060015161467e565b15613f5d575050604080516020810190915260008152600190613d2a565b6000604051806060016040528060278152602001615ed360279139915091509250929050565b60006103b78260800151613f9a84602001516143c3565b613fa38561484b565b8560a0015161467e565b6060613fba600484615bf5565b92506000613fcb611d448585015190565b63ffffffff169050606081158015613fee57604051915060208201604052614038565b6040519150601f8316801560200281840101848101888315602002848a0101015b8183101561402757805183526020928301920161400f565b5050848452601f01601f1916604052505b50949350505050565b604080516020810190915260608152604080516020810190915260608152600061406a84611c7c565b905060005b816020015151811015611a485760008260200151828151811061409457614094615b81565b60200260200101519050600061ffff16816000015161ffff1614156140bb57604081015184525b50806140c681615bda565b91505061406f565b6140d6615465565b6140de615465565b60006140e984611c7c565b905060005b816020015151811015611a485760008260200151828151811061411357614113615b81565b60200260200101519050600061ffff16816000015161ffff16141561414c57614145614140826040015190565b614975565b84526141ae565b805161ffff166001141561417f576000614167826040015190565b9050614174815182015190565b6020860152506141ae565b805161ffff16600214156141ae57600061419a826040015190565b90506141a7815182015190565b6040860152505b50806141b981615bda565b9150506140ee565b60006103b7611d4460048460400151015190565b6060806000836020015151111561427c576040805160028082526060820190925290816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816141fc57905050905061423c60008460000151611f0a565b8160008151811061424f5761424f615b81565b602002602001018190525061426960018460200151611f0a565b81600181518110612e6e57612e6e615b81565b60408051600180825281830190925290816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816142915790505090506142d160008460000151611f0a565b81600081518110611c3857611c38615b81565b60408051808201909152606080825260208201526040805180820190915260608082526020820152600061431784611c7c565b905060005b816020015151811015611a485760008260200151828151811061434157614341615b81565b60200260200101519050600061ffff16816000015161ffff16141561436c5760408101518452614385565b805161ffff166001141561438557604081015160208501525b508061439081615bda565b91505061431c565b60006143a382611b85565b805190602001206143b384611b85565b8051906020012014905092915050565b60606000826040015160038111156143dd576143dd61571f565b14156143f8576103b76143f38360c001516138db565b614a29565b6001826040015160038111156144105761441061571f565b141561442b576103b76144268360c0015161399d565b614a46565b6002826040015160038111156144435761444361571f565b141561445e576103b76144598360c00151613331565b614a63565b6003826040015160038111156144765761447661571f565b1415614491576103b761448c8360c00151613af5565b614a80565b604051636381e58960e11b815260206004820152602660248201527f6765745261775075626c69634b65793a20636572742074797065206e6f7420736044820152651d5c1c1bdc9d60d21b6064820152608401610427565b604080516007808252610100820190925260609160009190816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161450657905050905061454660008460000151611f0a565b8160008151811061455957614559615b81565b602002602001018190525061457360018460200151611f0a565b8160018151811061458657614586615b81565b60200260200101819052506145b46002611bf3856040015160038111156145af576145af61571f565b614a94565b816002815181106145c7576145c7615b81565b60200260200101819052506145e46003612e568560600151611b85565b816003815181106145f7576145f7615b81565b602002602001018190525061461160048460800151614aa8565b8160048151811061462457614624615b81565b602002602001018190525061463e60058460a00151614aa8565b8160058151811061465157614651615b81565b602002602001018190525061466b60068460c00151611f0a565b81600681518110611c3857611c38615b81565b60006146c1604051806040016040528060168152602001754b656363616b32353657697468536563703235366b3160501b81525086613dd990919063ffffffff16565b61472a57604051636381e58960e11b815260206004820152603360248201527f6f6e6c7920737570706f7274204b454343414b3235365f574954485f534543506044820152723235364b31207369676e6174757265206e6f7760681b6064820152608401610427565b60418251101561477d57604051636381e58960e11b815260206004820152601a60248201527f77726f6e6720736563703235366b3120736967206c656e6774680000000000006044820152606401610427565b601b8260408151811061479257614792615b81565b01602001516147a4919060f81c615ddd565b60f81b826040815181106147ba576147ba615b81565b60200101906001600160f81b031916908160001a905350835160208501206000906147ec908551602087012085614b28565b9050601b8360408151811061480357614803615b81565b0160200151614815919060f81c615e02565b60f81b8360408151811061482b5761482b615b81565b60200101906001600160f81b031916908160001a90535095945050505050565b60408051600580825260c0820190925260609160009190816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816148675790505090506148a760008460000151611f0a565b816000815181106148ba576148ba615b81565b60200260200101819052506148d76001612e568560200151614b89565b816001815181106148ea576148ea615b81565b602002602001018190525061490460028460400151611f0a565b8160028151811061491757614917615b81565b60200260200101819052506149356003846060015160200151611f0a565b8160038151811061494857614948615b81565b602002602001018190525061496260048460800151611f0a565b81600481518110611c3857611c38615b81565b6040805180820190915260608082526020820152604080518082019091526060808252602082015260006149a884611c7c565b905060005b816020015151811015611a48576000826020015182815181106149d2576149d2615b81565b60200260200101519050600061ffff16816000015161ffff1614156149fd5760408101518452614a16565b805161ffff1660011415614a1657604081015160208501525b5080614a2181615bda565b9150506149ad565b60606103b782604001518360200151614d4990919063ffffffff16565b60606103b78260a001518360800151614d4990919063ffffffff16565b60606103b782608001518360600151614d4990919063ffffffff16565b60608181015160408301516103b791614d49565b60008160038111156103b7576103b761571f565b60408051606080820183526000808352602083015291810191909152604080516008808252818301909252600091602082018180368337019050509050614b046008614af385612244565b908301600719810180519290915252565b6040805160608101825261ffff959095168552600860208601528401525090919050565b6000806000614b378585614e6b565b90925090506000816004811115614b5057614b5061571f565b148015614b6e5750856001600160a01b0316826001600160a01b0316145b80614b7f5750614b7f868686614eae565b9695505050505050565b604080516008808252610120820190925260609160009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081614ba6579050509050614be660008460000151611f0a565b81600081518110614bf957614bf9615b81565b6020026020010181905250614c1360018460200151611f0a565b81600181518110614c2657614c26615b81565b6020026020010181905250614c4f6002611bf3856040015160038111156145af576145af61571f565b81600281518110614c6257614c62615b81565b60200260200101819052","50614c7f6003612e568560600151611b85565b81600381518110614c9257614c92615b81565b6020026020010181905250614cac60048460800151614aa8565b81600481518110614cbf57614cbf615b81565b6020026020010181905250614cd960058460a00151614aa8565b81600581518110614cec57614cec615b81565b6020026020010181905250614d0660068460c00151611f0a565b81600681518110614d1957614d19615b81565b6020026020010181905250614d366007612e568560e00151614f9a565b81600781518110611c3857611c38615b81565b6060600083516001811115614d6057614d6061571f565b14614dbc57604051636381e58960e11b815260206004820152602560248201527f6f6e6c7920737570706f727420583530395f5055424c49435f4b45595f494e466044820152644f206e6f7760d81b6064820152608401610427565b60408360200151511015614e1357604051636381e58960e11b815260206004820152601c60248201527f7075626c6963206b6579206c656e677468206e6f7420656e6f757468000000006044820152606401610427565b60208301518051600090614e2990604090615bad565b60408051818152606081018252919250600091906020820181803683370190505092909101602081810151908401526040908101519083015250905092915050565b600080825160411415614ea25760208301516040840151606085015160001a614e9687828585615090565b94509450505050613d2a565b50600090506002613d2a565b6000806000856001600160a01b031663973e417a60e01b8686604051602401614ed8929190615e25565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051614f169190615c35565b600060405180830381855afa9150503d8060008114614f51576040519150601f19603f3d011682016040523d82523d6000602084013e614f56565b606091505b5091509150818015614f6a57506020815110155b8015614b7f57508051634b9f20bd60e11b90614f8f9083016020908101908401615e3e565b149695505050505050565b60408051600480825260a0820190925260609160009190816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081614fb6579050509050614ff660008460000151611f0a565b8160008151811061500957615009615b81565b602002602001018190525061502360018460200151611f0a565b8160018151811061503657615036615b81565b602002602001018190525061505060028460400151611f0a565b8160028151811061506357615063615b81565b602002602001018190525061507d60038460600151611f0a565b81600381518110611c3857611c38615b81565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156150c7575060009050600361514b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561511b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166151445760006001925092505061514b565b9150600090505b94509492505050565b82805461516090615816565b90600052602060002090601f01602090048101928261518257600085556151c8565b82601f1061519b5782800160ff198235161785556151c8565b828001600101855582156151c8579182015b828111156151c85782358255916020019190600101906151ad565b506151d4929150615494565b5090565b8280546151e490615816565b90600052602060002090601f01602090048101928261520657600085556151c8565b82601f1061521f57805160ff19168380011785556151c8565b828001600101855582156151c8579182015b828111156151c8578251825591602001919060010190615231565b604080516101008101825260608082526020820152908101600081526020016152736152cf565b815260200160006001600160401b0316815260200160006001600160401b03168152602001606081526020016152ca6040518060800160405280606081526020016060815260200160608152602001606081525090565b905290565b604080518082019091528060005b8152602001606081525090565b6040518060c001604052806060815260200161530461524c565b81526020016060815260200161532d604051806040016040528060008152602001606081525090565b815260200160608152602001606081525090565b6040805160a08101909152606060808201908152815260208101615363615465565b815260006020820152606060409091015290565b604080516101208101825260008082526020820152606091810182905290810161539f6153d4565b81526020016153ac615465565b8152602001600063ffffffff1681526020016060815260200160608152602001606081525090565b6040805160a08101825260608082526020820152908101600081526020016152dd6152cf565b6040518060600160405280606081526020016152dd6152cf565b6040805160c0810190915260608152602081016000815260200160608152602001606081526020016152dd6152cf565b604051806080016040528060608152602001606081526020016152dd6152cf565b6040805160a0810182526060808201818152608083019190915281526000602082018190529181019190915290565b5b808211156151d45760008155600101615495565b60008083601f8401126154bb57600080fd5b5081356001600160401b038111156154d257600080fd5b602083019150836020828501011115613d2a57600080fd5b600080602083850312156154fd57600080fd5b82356001600160401b0381111561551357600080fd5b61551f858286016154a9565b90969095509350505050565b60006020828403121561553d57600080fd5b81356001600160a01b038116811461312e57600080fd5b60008060006040848603121561556957600080fd5b83356001600160401b0381111561557f57600080fd5b61558b868287016154a9565b909450925050602084013563ffffffff811681146155a857600080fd5b809150509250925092565b60005b838110156155ce5781810151838201526020016155b6565b838111156155dd576000848401525b50505050565b600081518084526155fb8160208601602086016155b3565b601f01601f19169290920160200192915050565b60208152600061312e60208301846155e3565b6003811061043957600080fd5b60006020828403121561564157600080fd5b813561312e81615622565b63b95aa35560e01b600052604160045260246000fd5b60006001600160401b038084111561567c5761567c61564c565b604051601f8501601f19908116603f011681019082821181831017156156a4576156a461564c565b816040528093508581528686860111156156bd57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156156e957600080fd5b81356001600160401b038111156156ff57600080fd5b8201601f8101841361571057600080fd5b611c7484823560208401615662565b63b95aa35560e01b600052602160045260246000fd5b600381106157455761574561571f565b9052565b6020808252825182820181905260009190848201906040850190845b8181101561578857615778838551615735565b9284019291840191600101615765565b50909695505050505050565b6000602082840312156157a657600080fd5b5035919050565b6000806000604084860312156157c257600080fd5b83356001600160401b038111156157d857600080fd5b6157e4868287016154a9565b909790965060209590950135949350505050565b602081016103b78284615735565b8183823760009101908152919050565b600181811c9082168061582a57607f821691505b6020821081141561584b5763b95aa35560e01b600052602260045260246000fd5b50919050565b60006020828403121561586357600080fd5b815161312e81615622565b6040810161587c8285615735565b6001600160a01b039290921660209190910152919050565b6000815160a084526158a960a08501826155e3565b9050602083015184820360208601526158c282826155e3565b91505060408301516158d76040860182615735565b50606083015184820360608601528051600281106158f7576158f761571f565b80835250602081015190506040602083015261591660408301826155e3565b9150506080830151848203608086015261211282826155e3565b600081516060845280516040606086015261594e60a08601826155e3565b905060208201519150605f1985820301608086015261596d81836155e3565b91505060208301516020850152604083015160408501528091505092915050565b805163ffffffff168252600061012060208301516159b4602086018263ffffffff169052565b5060408301518160408601526159cc828601826155e3565b915050606083015184820360608601526159e68282615894565b91505060808301518482036080860152615a008282615930565b91505060a0830151615a1a60a086018263ffffffff169052565b5060c083015184820360c0860152615a3282826155e3565b91505060e083015184820360e0860152615a4c82826155e3565b9150506101008084015185830382870152614b7f83826155e3565b604081526000615a7a604083018561598e565b82810360208401528351608082528051905060206080830152615aa060a08301826155e3565b905060208501518282036020840152615ab98282615930565b91505063ffffffff604086015116604083015260608501518282036060840152615ae382826155e3565b979650505050505050565b600060208284031215615b0057600080fd5b8151801515811461312e57600080fd5b604081526000615b236040830185615930565b905082151560208301529392505050565b6040815260008351604080840152615b4f60808401826155e3565b90506020850151603f19848303016060850152615b6c82826155e3565b9150508281036020840152612112818561598e565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b600082821015615bbf57615bbf615b97565b500390565b63b95aa35560e01b600052603160045260246000fd5b6000600019821415615bee57615bee615b97565b5060010190565b60008219821115615c0857615c08615b97565b500190565b600063ffffffff808316818516808303821115615c2c57615c2c615b97565b01949350505050565b60008251615c478184602087016155b3565b9190910192915050565b600080835481600182811c915080831680615c6d57607f83169250","5b6020808410821415615c8d5763b95aa35560e01b86526022600452602486fd5b818015615ca15760018114615cb257615cdf565b60ff19861689528489019650615cdf565b60008a81526020902060005b86811015615cd75781548b820152908501908301615cbe565b505084890196505b509498975050505050505050565b600181815b80851115615d28578160001904821115615d0e57615d0e615b97565b80851615615d1b57918102915b93841c9390800290615cf2565b509250929050565b600082615d3f575060016103b7565b81615d4c575060006103b7565b8160018114615d625760028114615d6c57615d88565b60019150506103b7565b60ff841115615d7d57615d7d615b97565b50506001821b6103b7565b5060208310610133831016604e8410600b8410161715615dab575081810a6103b7565b615db58383615ced565b8060001904821115615dc957615dc9615b97565b029392505050565b600061312e8383615d30565b600060ff821660ff84168060ff03821115615dfa57615dfa615b97565b019392505050565b600060ff821660ff841680821015615e1c57615e1c615b97565b90039392505050565b828152604060208201526000611c7460408301846155e3565b600060208284031215615e5057600080fd5b505191905056fe63726f7373636861696e20636572742076616c69646174696f6e3a2072657175697265206263646e7320726f6f74206f7220646f6d61696e207370616365206f776e65722063657274206173207369676e657263726f7373636861696e20636572742076616c69646174696f6e3a2077726f6e67207369676e657263726f7373636861696e20636572742076616c69646174696f6e3a20696e76616c69642073696763726f7373636861696e20636572742076616c69646174696f6e3a2074797065206f66207369676e65722063657274206d757374206265206263646e73a2646970667358221220e72b5fad5218fd943fcee666738ea6f2472f5df364b1582d2dafea28feb5a11a64736f6c634300080b0033"};
  
      public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);
  
      public static final String[] ABI_ARRAY = {"[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"rawRootBcdnsCert\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum PTCTypeEnum\",\"name\":\"ptcType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"verifierAddress\",\"type\":\"address\"}],\"name\":\"AddPtcVerifier\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"laneHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"LatestTpBta\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"ownerOid\",\"type\":\"bytes32\"}],\"name\":\"NewBcdnsCert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"ptcOwnerOid\",\"type\":\"bytes32\"}],\"name\":\"NewPtrTrustRoot\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"ptcOwnerOid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVersionNum\",\"type\":\"uint256\"}],\"name\":\"NewVerifyAnchor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum PTCTypeEnum\",\"name\":\"ptcType\",\"type\":\"uint8\"}],\"name\":\"RemovePtcVerifier\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"laneHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"}],\"name\":\"SaveTpBta\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"senderDomain\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"}],\"internalType\":\"struct CrossChainChannel\",\"name\":\"channel\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"senderId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"receiverId\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct CrossChainLane\",\"name\":\"tpbtaLane\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"VerifyProof\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"verifierContract\",\"type\":\"address\"}],\"name\":\"addPtcVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"rawTpBta\",\"type\":\"bytes\"}],\"name\":\"addTpBta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"bcdnsCertMap\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"tpbtaLane\",\"type\":\"bytes\"}],\"name\":\"getLatestTpBta\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"ptcOwnerOid\",\"type\":\"bytes\"}],\"name\":\"getPTCTrustRoot\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"ptcOwnerOid\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"versionNum\",\"type\":\"uint256\"}],\"name\":\"getPTCVerifyAnchor\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedPTCType\",\"outputs\":[{\"internalType\":\"enum PTCTypeEnum[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"tpbtaLane\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"tpBtaVersion\",\"type\":\"uint32\"}],\"name\":\"getTpBta\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"ptcOwnerOid\",\"type\":\"bytes\"}],\"name\":\"hasPTCTrustRoot\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"ptcOwnerOid\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"versionNum\",\"type\":\"uint256\"}],\"name\":\"hasPTCVerifyAnchor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"tpbtaLane\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"tpBtaVersion\",\"type\":\"uint32\"}],\"name\":\"hasTpBta\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"rawRootBcdnsCert\",\"type\":\"bytes\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"ownerOidToBcdnsDomainSpaceMap\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"ptcTrustRootMap\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"rawPtcTrustRoot\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ptcTypeSupported\",\"outputs\":[{\"internalType\":\"enum PTCTypeEnum\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum PTCTypeEnum\",\"name\":\"ptcType\",\"type\":\"uint8\"}],\"name\":\"removePtcVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tpBtaMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"latestVersion\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"rawPtcTrustRoot\",\"type\":\"bytes\"}],\"name\":\"updatePTCTrustRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum PTCTypeEnum\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"verifierMap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"rawTpProof\",\"type\":\"bytes\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};
  
      public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);
  
      public static final String FUNC_ADDPTCVERIFIER = "addPtcVerifier";
  
      public static final String FUNC_ADDTPBTA = "addTpBta";
  
      public static final String FUNC_BCDNSCERTMAP = "bcdnsCertMap";
  
      public static final String FUNC_GETLATESTTPBTA = "getLatestTpBta";
  
      public static final String FUNC_GETPTCTRUSTROOT = "getPTCTrustRoot";
  
      public static final String FUNC_GETPTCVERIFYANCHOR = "getPTCVerifyAnchor";
  
      public static final String FUNC_GETSUPPORTEDPTCTYPE = "getSupportedPTCType";
  
      public static final String FUNC_GETTPBTA = "getTpBta";
  
      public static final String FUNC_HASPTCTRUSTROOT = "hasPTCTrustRoot";
  
      public static final String FUNC_HASPTCVERIFYANCHOR = "hasPTCVerifyAnchor";
  
      public static final String FUNC_HASTPBTA = "hasTpBta";
  
      public static final String FUNC_INIT = "init";
  
      public static final String FUNC_OWNER = "owner";
  
      public static final String FUNC_OWNEROIDTOBCDNSDOMAINSPACEMAP = "ownerOidToBcdnsDomainSpaceMap";
  
      public static final String FUNC_PTCTRUSTROOTMAP = "ptcTrustRootMap";
  
      public static final String FUNC_PTCTYPESUPPORTED = "ptcTypeSupported";
  
      public static final String FUNC_REMOVEPTCVERIFIER = "removePtcVerifier";
  
      public static final String FUNC_RENOUNCEOWNERSHIP = "renounceOwnership";
  
      public static final String FUNC_TPBTAMAP = "tpBtaMap";
  
      public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership";
  
      public static final String FUNC_UPDATEPTCTRUSTROOT = "updatePTCTrustRoot";
  
      public static final String FUNC_VERIFIERMAP = "verifierMap";
  
      public static final String FUNC_VERIFYPROOF = "verifyProof";
  
      public static final Event ADDPTCVERIFIER_EVENT = new Event("AddPtcVerifier", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}, new TypeReference<Address>() {}));
      ;
  
      public static final Event INITIALIZED_EVENT = new Event("Initialized", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
      ;
  
      public static final Event LATESTTPBTA_EVENT = new Event("LatestTpBta", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}));
      ;
  
      public static final Event NEWBCDNSCERT_EVENT = new Event("NewBcdnsCert", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
      ;
  
      public static final Event NEWPTRTRUSTROOT_EVENT = new Event("NewPtrTrustRoot", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
      ;
  
      public static final Event NEWVERIFYANCHOR_EVENT = new Event("NewVerifyAnchor", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}));
      ;
  
      public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
      ;
  
      public static final Event REMOVEPTCVERIFIER_EVENT = new Event("RemovePtcVerifier", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
      ;
  
      public static final Event SAVETPBTA_EVENT = new Event("SaveTpBta", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Uint256>() {}));
      ;
  
      public static final Event VERIFYPROOF_EVENT = new Event("VerifyProof", 
              Arrays.<TypeReference<?>>asList(new TypeReference<CrossChainLane>() {}, new TypeReference<Bool>() {}));
      ;
  
      protected PtcHub(String contractAddress, Client client, CryptoKeyPair credential) {
          super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
      }
  
      public static String getBinary(CryptoSuite cryptoSuite) {
          return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
      }
  
      public static String getABI() {
          return ABI;
      }
  
      public List<AddPtcVerifierEventResponse> getAddPtcVerifierEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(ADDPTCVERIFIER_EVENT, transactionReceipt);
          ArrayList<AddPtcVerifierEventResponse> responses = new ArrayList<AddPtcVerifierEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              AddPtcVerifierEventResponse typedResponse = new AddPtcVerifierEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.ptcType = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.verifierAddress = (String) eventValues.getNonIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeAddPtcVerifierEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(ADDPTCVERIFIER_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeAddPtcVerifierEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(ADDPTCVERIFIER_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<InitializedEventResponse> getInitializedEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(INITIALIZED_EVENT, transactionReceipt);
          ArrayList<InitializedEventResponse> responses = new ArrayList<InitializedEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              InitializedEventResponse typedResponse = new InitializedEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.version = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeInitializedEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(INITIALIZED_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeInitializedEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(INITIALIZED_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<LatestTpBtaEventResponse> getLatestTpBtaEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(LATESTTPBTA_EVENT, transactionReceipt);
          ArrayList<LatestTpBtaEventResponse> responses = new ArrayList<LatestTpBtaEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              LatestTpBtaEventResponse typedResponse = new LatestTpBtaEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.laneHash = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.version = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeLatestTpBtaEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(LATESTTPBTA_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeLatestTpBtaEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(LATESTTPBTA_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<NewBcdnsCertEventResponse> getNewBcdnsCertEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(NEWBCDNSCERT_EVENT, transactionReceipt);
          ArrayList<NewBcdnsCertEventResponse> responses = new ArrayList<NewBcdnsCertEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              NewBcdnsCertEventResponse typedResponse = new NewBcdnsCertEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.ownerOid = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeNewBcdnsCertEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(NEWBCDNSCERT_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeNewBcdnsCertEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(NEWBCDNSCERT_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<NewPtrTrustRootEventResponse> getNewPtrTrustRootEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(NEWPTRTRUSTROOT_EVENT, transactionReceipt);
          ArrayList<NewPtrTrustRootEventResponse> responses = new ArrayList<NewPtrTrustRootEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              NewPtrTrustRootEventResponse typedResponse = new NewPtrTrustRootEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.ptcOwnerOid = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeNewPtrTrustRootEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(NEWPTRTRUSTROOT_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeNewPtrTrustRootEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(NEWPTRTRUSTROOT_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<NewVerifyAnchorEventResponse> getNewVerifyAnchorEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(NEWVERIFYANCHOR_EVENT, transactionReceipt);
          ArrayList<NewVerifyAnchorEventResponse> responses = new ArrayList<NewVerifyAnchorEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              NewVerifyAnchorEventResponse typedResponse = new NewVerifyAnchorEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.ptcOwnerOid = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.newVersionNum = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeNewVerifyAnchorEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(NEWVERIFYANCHOR_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeNewVerifyAnchorEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(NEWVERIFYANCHOR_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<OwnershipTransferredEventResponse> getOwnershipTransferredEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt);
          ArrayList<OwnershipTransferredEventResponse> responses = new ArrayList<OwnershipTransferredEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
              typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeOwnershipTransferredEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeOwnershipTransferredEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<RemovePtcVerifierEventResponse> getRemovePtcVerifierEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(REMOVEPTCVERIFIER_EVENT, transactionReceipt);
          ArrayList<RemovePtcVerifierEventResponse> responses = new ArrayList<RemovePtcVerifierEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              RemovePtcVerifierEventResponse typedResponse = new RemovePtcVerifierEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.ptcType = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeRemovePtcVerifierEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(REMOVEPTCVERIFIER_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeRemovePtcVerifierEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(REMOVEPTCVERIFIER_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<SaveTpBtaEventResponse> getSaveTpBtaEvents(TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(SAVETPBTA_EVENT, transactionReceipt);
          ArrayList<SaveTpBtaEventResponse> responses = new ArrayList<SaveTpBtaEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              SaveTpBtaEventResponse typedResponse = new SaveTpBtaEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.laneHash = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.version = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeSaveTpBtaEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(SAVETPBTA_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeSaveTpBtaEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(SAVETPBTA_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<VerifyProofEventResponse> getVerifyProofEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(VERIFYPROOF_EVENT, transactionReceipt);
          ArrayList<VerifyProofEventResponse> responses = new ArrayList<VerifyProofEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              VerifyProofEventResponse typedResponse = new VerifyProofEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.tpbtaLane = (CrossChainLane) eventValues.getNonIndexedValues().get(0);
              typedResponse.result = (Boolean) eventValues.getNonIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeVerifyProofEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(VERIFYPROOF_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeVerifyProofEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(VERIFYPROOF_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public TransactionReceipt addPtcVerifier(String verifierContract) {
          final Function function = new Function(
                  FUNC_ADDPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(verifierContract)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodAddPtcVerifierRawFunction(String verifierContract) throws
              ContractException {
          final Function function = new Function(FUNC_ADDPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(verifierContract)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForAddPtcVerifier(String verifierContract) {
          final Function function = new Function(
                  FUNC_ADDPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(verifierContract)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String addPtcVerifier(String verifierContract, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_ADDPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(verifierContract)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<String> getAddPtcVerifierInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_ADDPTCVERIFIER, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<String>(
  
                  (String) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt addTpBta(byte[] rawTpBta) {
          final Function function = new Function(
                  FUNC_ADDTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpBta)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodAddTpBtaRawFunction(byte[] rawTpBta) throws ContractException {
          final Function function = new Function(FUNC_ADDTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpBta)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForAddTpBta(byte[] rawTpBta) {
          final Function function = new Function(
                  FUNC_ADDTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpBta)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String addTpBta(byte[] rawTpBta, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_ADDTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpBta)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<byte[]> getAddTpBtaInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_ADDTPBTA, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public byte[] bcdnsCertMap(String param0) throws ContractException {
          final Function function = new Function(FUNC_BCDNSCERTMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodBcdnsCertMapRawFunction(String param0) throws ContractException {
          final Function function = new Function(FUNC_BCDNSCERTMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return function;
      }
  
      public byte[] getLatestTpBta(byte[] tpbtaLane) throws ContractException {
          final Function function = new Function(FUNC_GETLATESTTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(tpbtaLane)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodGetLatestTpBtaRawFunction(byte[] tpbtaLane) throws ContractException {
          final Function function = new Function(FUNC_GETLATESTTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(tpbtaLane)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return function;
      }
  
      public byte[] getPTCTrustRoot(byte[] ptcOwnerOid) throws ContractException {
          final Function function = new Function(FUNC_GETPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodGetPTCTrustRootRawFunction(byte[] ptcOwnerOid) throws
              ContractException {
          final Function function = new Function(FUNC_GETPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return function;
      }
  
      public byte[] getPTCVerifyAnchor(byte[] ptcOwnerOid, BigInteger versionNum) throws
              ContractException {
          final Function function = new Function(FUNC_GETPTCVERIFYANCHOR, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(versionNum)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodGetPTCVerifyAnchorRawFunction(byte[] ptcOwnerOid,
              BigInteger versionNum) throws ContractException {
          final Function function = new Function(FUNC_GETPTCVERIFYANCHOR, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(versionNum)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return function;
      }
  
      public List getSupportedPTCType() throws ContractException {
          final Function function = new Function(FUNC_GETSUPPORTEDPTCTYPE, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint8>>() {}));
          List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
          return convertToNative(result);
      }
  
      public Function getMethodGetSupportedPTCTypeRawFunction() throws ContractException {
          final Function function = new Function(FUNC_GETSUPPORTEDPTCTYPE, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint8>>() {}));
          return function;
      }
  
      public byte[] getTpBta(byte[] tpbtaLane, BigInteger tpBtaVersion) throws ContractException {
          final Function function = new Function(FUNC_GETTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(tpbtaLane), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint32(tpBtaVersion)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodGetTpBtaRawFunction(byte[] tpbtaLane, BigInteger tpBtaVersion) throws
              ContractException {
          final Function function = new Function(FUNC_GETTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(tpbtaLane), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint32(tpBtaVersion)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return function;
      }
  
      public Boolean hasPTCTrustRoot(byte[] ptcOwnerOid) throws ContractException {
          final Function function = new Function(FUNC_HASPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
          return executeCallWithSingleValueReturn(function, Boolean.class);
      }
  
      public Function getMethodHasPTCTrustRootRawFunction(byte[] ptcOwnerOid) throws
              ContractException {
          final Function function = new Function(FUNC_HASPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
          return function;
      }
  
      public Boolean hasPTCVerifyAnchor(byte[] ptcOwnerOid, BigInteger versionNum) throws
              ContractException {
          final Function function = new Function(FUNC_HASPTCVERIFYANCHOR, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(versionNum)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
          return executeCallWithSingleValueReturn(function, Boolean.class);
      }
  
      public Function getMethodHasPTCVerifyAnchorRawFunction(byte[] ptcOwnerOid,
              BigInteger versionNum) throws ContractException {
          final Function function = new Function(FUNC_HASPTCVERIFYANCHOR, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(ptcOwnerOid), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(versionNum)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
          return function;
      }
  
      public Boolean hasTpBta(byte[] tpbtaLane, BigInteger tpBtaVersion) throws ContractException {
          final Function function = new Function(FUNC_HASTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(tpbtaLane), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint32(tpBtaVersion)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
          return executeCallWithSingleValueReturn(function, Boolean.class);
      }
  
      public Function getMethodHasTpBtaRawFunction(byte[] tpbtaLane, BigInteger tpBtaVersion) throws
              ContractException {
          final Function function = new Function(FUNC_HASTPBTA, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(tpbtaLane), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint32(tpBtaVersion)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
          return function;
      }
  
      public TransactionReceipt init(byte[] rawRootBcdnsCert) {
          final Function function = new Function(
                  FUNC_INIT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawRootBcdnsCert)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodInitRawFunction(byte[] rawRootBcdnsCert) throws ContractException {
          final Function function = new Function(FUNC_INIT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawRootBcdnsCert)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForInit(byte[] rawRootBcdnsCert) {
          final Function function = new Function(
                  FUNC_INIT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawRootBcdnsCert)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String init(byte[] rawRootBcdnsCert, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_INIT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawRootBcdnsCert)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<byte[]> getInitInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_INIT, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public String owner() throws ContractException {
          final Function function = new Function(FUNC_OWNER, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return executeCallWithSingleValueReturn(function, String.class);
      }
  
      public Function getMethodOwnerRawFunction() throws ContractException {
          final Function function = new Function(FUNC_OWNER, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return function;
      }
  
      public String ownerOidToBcdnsDomainSpaceMap(byte[] param0) throws ContractException {
          final Function function = new Function(FUNC_OWNEROIDTOBCDNSDOMAINSPACEMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
          return executeCallWithSingleValueReturn(function, String.class);
      }
  
      public Function getMethodOwnerOidToBcdnsDomainSpaceMapRawFunction(byte[] param0) throws
              ContractException {
          final Function function = new Function(FUNC_OWNEROIDTOBCDNSDOMAINSPACEMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
          return function;
      }
  
      public byte[] ptcTrustRootMap(byte[] param0) throws ContractException {
          final Function function = new Function(FUNC_PTCTRUSTROOTMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodPtcTrustRootMapRawFunction(byte[] param0) throws ContractException {
          final Function function = new Function(FUNC_PTCTRUSTROOTMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          return function;
      }
  
      public BigInteger ptcTypeSupported(BigInteger param0) throws ContractException {
          final Function function = new Function(FUNC_PTCTYPESUPPORTED, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
          return executeCallWithSingleValueReturn(function, BigInteger.class);
      }
  
      public Function getMethodPtcTypeSupportedRawFunction(BigInteger param0) throws
              ContractException {
          final Function function = new Function(FUNC_PTCTYPESUPPORTED, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
          return function;
      }
  
      public TransactionReceipt removePtcVerifier(BigInteger ptcType) {
          final Function function = new Function(
                  FUNC_REMOVEPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(ptcType)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodRemovePtcVerifierRawFunction(BigInteger ptcType) throws
              ContractException {
          final Function function = new Function(FUNC_REMOVEPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(ptcType)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForRemovePtcVerifier(BigInteger ptcType) {
          final Function function = new Function(
                  FUNC_REMOVEPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(ptcType)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String removePtcVerifier(BigInteger ptcType, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_REMOVEPTCVERIFIER, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(ptcType)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<BigInteger> getRemovePtcVerifierInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_REMOVEPTCVERIFIER, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<BigInteger>(
  
                  (BigInteger) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt renounceOwnership() {
          final Function function = new Function(
                  FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodRenounceOwnershipRawFunction() throws ContractException {
          final Function function = new Function(FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForRenounceOwnership() {
          final Function function = new Function(
                  FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String renounceOwnership(TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public BigInteger tpBtaMap(byte[] param0) throws ContractException {
          final Function function = new Function(FUNC_TPBTAMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
          return executeCallWithSingleValueReturn(function, BigInteger.class);
      }
  
      public Function getMethodTpBtaMapRawFunction(byte[] param0) throws ContractException {
          final Function function = new Function(FUNC_TPBTAMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
          return function;
      }
  
      public TransactionReceipt transferOwnership(String newOwner) {
          final Function function = new Function(
                  FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodTransferOwnershipRawFunction(String newOwner) throws
              ContractException {
          final Function function = new Function(FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForTransferOwnership(String newOwner) {
          final Function function = new Function(
                  FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String transferOwnership(String newOwner, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<String> getTransferOwnershipInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<String>(
  
                  (String) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt updatePTCTrustRoot(byte[] rawPtcTrustRoot) {
          final Function function = new Function(
                  FUNC_UPDATEPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawPtcTrustRoot)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodUpdatePTCTrustRootRawFunction(byte[] rawPtcTrustRoot) throws
              ContractException {
          final Function function = new Function(FUNC_UPDATEPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawPtcTrustRoot)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForUpdatePTCTrustRoot(byte[] rawPtcTrustRoot) {
          final Function function = new Function(
                  FUNC_UPDATEPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawPtcTrustRoot)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String updatePTCTrustRoot(byte[] rawPtcTrustRoot, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_UPDATEPTCTRUSTROOT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawPtcTrustRoot)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<byte[]> getUpdatePTCTrustRootInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_UPDATEPTCTRUSTROOT, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public String verifierMap(BigInteger param0) throws ContractException {
          final Function function = new Function(FUNC_VERIFIERMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return executeCallWithSingleValueReturn(function, String.class);
      }
  
      public Function getMethodVerifierMapRawFunction(BigInteger param0) throws ContractException {
          final Function function = new Function(FUNC_VERIFIERMAP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(param0)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return function;
      }
  
      public TransactionReceipt verifyProof(byte[] rawTpProof) {
          final Function function = new Function(
                  FUNC_VERIFYPROOF, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpProof)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodVerifyProofRawFunction(byte[] rawTpProof) throws ContractException {
          final Function function = new Function(FUNC_VERIFYPROOF, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpProof)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForVerifyProof(byte[] rawTpProof) {
          final Function function = new Function(
                  FUNC_VERIFYPROOF, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpProof)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String verifyProof(byte[] rawTpProof, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_VERIFYPROOF, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawTpProof)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<byte[]> getVerifyProofInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_VERIFYPROOF, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public static PtcHub load(String contractAddress, Client client, CryptoKeyPair credential) {
          return new PtcHub(contractAddress, client, credential);
      }
  
      public static PtcHub deploy(Client client, CryptoKeyPair credential, byte[] rawRootBcdnsCert)
              throws ContractException {
          byte[] encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(rawRootBcdnsCert)));
          return deploy(PtcHub.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), encodedConstructor, null);
      }
  
      public static class CrossChainChannel extends DynamicStruct {
          public String senderDomain;
  
          public String receiverDomain;
  
          public CrossChainChannel(Utf8String senderDomain, Utf8String receiverDomain) {
              super(senderDomain,receiverDomain);
              this.senderDomain = senderDomain.getValue();
              this.receiverDomain = receiverDomain.getValue();
          }
  
          public CrossChainChannel(String senderDomain, String receiverDomain) {
              super(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain),new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain));
              this.senderDomain = senderDomain;
              this.receiverDomain = receiverDomain;
          }
      }
  
      public static class CrossChainLane extends DynamicStruct {
          public CrossChainChannel channel;
  
          public byte[] senderId;
  
          public byte[] receiverId;
  
          public CrossChainLane(CrossChainChannel channel, Bytes32 senderId, Bytes32 receiverId) {
              super(channel,senderId,receiverId);
              this.channel = channel;
              this.senderId = senderId.getValue();
              this.receiverId = receiverId.getValue();
          }
  
          public CrossChainLane(CrossChainChannel channel, byte[] senderId, byte[] receiverId) {
              super(channel,new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderId),new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverId));
              this.channel = channel;
              this.senderId = senderId;
              this.receiverId = receiverId;
          }
      }
  
      public static class AddPtcVerifierEventResponse {
          public TransactionReceipt.Logs log;
  
          public BigInteger ptcType;
  
          public String verifierAddress;
      }
  
      public static class InitializedEventResponse {
          public TransactionReceipt.Logs log;
  
          public BigInteger version;
      }
  
      public static class LatestTpBtaEventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] laneHash;
  
          public BigInteger version;
      }
  
      public static class NewBcdnsCertEventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] ownerOid;
      }
  
      public static class NewPtrTrustRootEventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] ptcOwnerOid;
      }
  
      public static class NewVerifyAnchorEventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] ptcOwnerOid;
  
          public BigInteger newVersionNum;
      }
  
      public static class OwnershipTransferredEventResponse {
          public TransactionReceipt.Logs log;
  
          public String previousOwner;
  
          public String newOwner;
      }
  
      public static class RemovePtcVerifierEventResponse {
          public TransactionReceipt.Logs log;
  
          public BigInteger ptcType;
      }
  
      public static class SaveTpBtaEventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] laneHash;
  
          public BigInteger version;
      }
  
      public static class VerifyProofEventResponse {
          public TransactionReceipt.Logs log;
  
          public CrossChainLane tpbtaLane;
  
          public Boolean result;
      }
  }
  